Перейти к содержанию

Статические файлы Masonite (Static Files)

Masonite делает использование статических файлов чрезвычайно простым. Whitenoise оборачивает приложение WSGI и прослушивает определенные запросы URI, которые зарегистрированы в ваших файлах конфигурации.

Конфигурация

Все конфигурации, относящиеся к статическим файлам, можно найти в файле config/filesystem.py. Константа STATICFILES представляет собой словарь, в качестве ключей - каталоги, а значения это псевдонимы.

Каталоги, которые следует включать в качестве ключей это расположение ваших статических файлов в виде относительного пути, начинающегося от корня вашего приложения. Например, ваши файлы css находятся в storage/assets/css, укажите этот путь в качестве ключа. В качестве значения укажите псевдоним, который вы хотите использовать в своих шаблонах. В этом примере мы будем использовать css/ в качестве псевдонима.

Для этого настройки константы STATICFILES должны выглядеть так:

config/storage.py

STATICFILES = {
    'storage/assets/css': 'assets/',
}

Теперь в наших шаблонах мы можем использовать:

<img src="/assets/style.css">
Готовый путь будет выглядеть так storage/assets/css/style.css.

Шаблонная функция статики

Все шаблоны имеют функцию, которую можно использовать для получения местоположения статических файлов. Вы можете указать драйвер и место расположения, используя имя драйвера или запись через точку.

Например:

....

's3': {
    's3_client': 'sIS8shn...'
    ...
    'path': 'https://s3.us-east-2.amazonaws.com/bucket'
},

....
...
<img src="{{ asset('s3', 'profile.jpg') }}" alt="profile" />
...

В результате получим:

<img
    src="https://s3.us-east-2.amazonaws.com/bucket/profile.jpg"
    alt="profile"
/>

Вы также можете указать расположение файлов в виде словаря и использовать запись через точку:

....

's3': {
    's3_client': 'sIS8shn...'
    ...
    'path': {
        'east': 'https://s3.us-east-2.amazonaws.com/east-bucket',
        'west': 'https://s3.us-west-16.amazonaws.com/west-bucket'
    },
}
....

И используйте запись через точку, следующим образом:

...
<img src="{{ asset('s3.east', 'profile.jpg') }}" alt="profile" />
...
<img src="{{ asset('s3.west', 'profile.jpg') }}" alt="profile" />
...

Обслуживание “корневых” ("Root") файлов

Иногда вам может понадобиться обслуживать файлы, которые обычно находятся в корневом каталоге вашего приложения, например, robots.txt или manifest.json. Эти файлы могут иметь псевдоним в вашей константе STATICFILES, в файле config/filesystem.py. Файлы необязательно должны находиться в корне вашего проекта, вместо этого они могут находиться в каталоге storage/root или storage/public, и иметь псевдоним с простым расширением /.

Например, базовая настройка будет выглядеть так:

resources/
routes/
storage/
  static/
  root/
    robots.txt
    manifest.json

И вы можете указать это в STATICFILES:

config/storage.py

STATICFILES = {
    # folder          # template alias
    'storage/static': 'static/',
    ...
    'storage/root': '/'
}

Теперь у вас будет доступ к localhost:8000/robots.txt, robots.txt будет правильно обработан, и он сможет правильно индексироваться поисковыми системами.

Вот и все! Работать со статическими файлами чрезвычайно просто.