Rozdział 22 · Tworzenie stron internetowych z Python

Pliki statyczne: CSS, obrazy i JavaScript

Jedna strona — kilka niezależnych żądań: HTML jest ponownie składana, statyka jest serwowana w obecnej formie.

Otwierając stronę ze stylem, przeglądarka faktycznie tworzy kilka oddzielnych HTTP- żądań: po jednym dla HTML, po jednym dla każdego pliku CSS-, obrazu, oraz JavaScript-, do którego odwołuje się strona. Takie pliki nazywane są statyczny: serwer przekazuje je bez zmian, w przeciwieństwie do HTML, który Jinja renderuje na nowo dla każdego żądania.

GET /żądanie strony HTMLGET/static/style.cssosobne zapytanie zaCSSGET/static/logo.pngosobne zapytanie zazdjęcie
Pojedyncza strona – wiele niezależnych HTTP- żądań

Flask domyślnie oczekuje plików statycznych w folderze static/ obok aplikacji i poda je pod adresami takimi jak /static/имя_файла:

struktura_proekta.txt
todo-app/
  app.py
  templates/
    base.html
  static/
    style.css

Wygodniej jest nie wpisywać adresu statycznego pliku do szablonu ręcznie, lecz otrzymywać go przez url_for('static', filename='style.css') – Ta funkcja się buduje URL opiera się na konfiguracji trasowania Flask, a nie tylko sklejaniu sznuru. To również Oszczędza to dużo pracy, jeśli struktura folderów się zmieni:

templates/base.html
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
templates/ i static/ to różne foldery, różne role
templates/ przechowuje pliki, które Jinja renderują na nowo dla każdego żądania, zastępując dane z Python. static/ przechowuje gotowe pliki udostępniane w obecnej formie, bez przetwarzania, takie jak CSS, obrazy, JavaScript, czcionki.