Раз и навсегда, статические файлы против Django 1.3 - PullRequest
0 голосов
/ 26 марта 2012

Я пытался следовать всем учебникам и темам, которые есть, я просто не могу их понять.

Извините, но, пожалуйста, объясните мне, как будто мне было три года ..

Что у меня есть: CSS, который я хотел бы использовать, стилизуя шаблон.

Как туда добраться: MD: проект / приложение / статический /

место style.css там

settings.py:

STATIC_ROOT = '/project/app/static/'

STATIC_URL = '/static/'

(Должно ли это по крайней мере дать мне строку '/ static /', когда я пытаюсь печатать {{STATIC_URL}} в шаблоне ..?)

template:
<LINK REL=StyleSheet HREF="{{ STATIC_URL }}/style.css" TYPE="text/css" MEDIA=screen>

По-моему, следующая логическая вещь будет заключаться в создании / static / -url aswell?

Я действительно потерян здесь ..

1 Ответ

2 голосов
/ 26 марта 2012

Система статических файлов Django состоит из двух вещей:

  1. Объединение статических файлов из нескольких (специфичных для приложения) каталогов в одно место, из которого они могут обслуживаться

  2. Обслуживание этих файлов по HTTP

Вы хотите # 1, если у вас есть несколько статических файлов, расположенных в разных каталогах. Вы хотите # 2, если хотите видеть эти файлы во время использования сервера разработки. На производстве вы обычно пропускаете # 2, потому что цель # 1 - поместить файлы куда-нибудь, чтобы ваш веб-сервер мог получить к ним доступ.

Организация и сбор статических файлов

С учетом сказанного, вот как вы получите # 1:

settings.py:

# This is a filesystem path
STATIC_ROOT = '/path/to/my/project/collected-static-files/'

# This is a URL prefix
STATIC_URL = '/static/'

INSTALLED_APPS = (
    ...
    'django.contrib.staticfiles',
    ...
)
TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'django.core.context_processors.static',
    ...
)

На этом этапе вы можете сделать несколько вещей:

  1. Вы помещаете ваши статические файлы в каталог / static / под каждым из ваших приложений. Вот где Джанго будет искать их. Существует дополнительная настройка STATIC_DIRS, которую вы можете использовать, если у вас есть статические файлы, которые находятся за пределами ваших приложений.

  2. Вы можете запустить manage.py collectstatic, чтобы Django просматривал все ваши приложения, находил все статические файлы и копировал их в /path/to/my/project/collected-static-files (Вот почему этот параметр является путем к файловой системе.)

  3. Вы можете использовать {{ STATIC_URL }} в шаблонах для доступа к файлам.

Обслуживание статических файлов по HTTP

В режиме разработки на сервере разработки Django автоматически обслуживает файлы из каталога STATIC_ROOT.

В основном, Django добавит обработчик URL для URL вида

/static/some-dir/some-file-name

И обслуживать контент с вашего жесткого диска, из пути к файловой системе

/path/to/my/project/collected-static-files/some-dir/some-file-name

На производстве это не произойдет автоматически, поэтому вам придется настроить веб-сервер так, чтобы он делал то же самое. (Просто не очень хорошая идея запускать все ваши статические файлы через полный конвейер обработки Django. Веб-сервер может сделать это намного эффективнее)

...