Вы смешиваете и сопоставляете статическую обработку файлов до и после Django 1.3. Первоначально все статические файлы обслуживались с MEDIA_URL
, но Django 1.3 представил пакет contrib статических файлов и соответствующие настройки STATIC_ROOT
и STATIC_URL
. django.views.static.serve
использует новое приложение staticfiles, которое вы не настроили.
Предполагая, что вы используете Django 1.3, сначала вам нужно добавить «staticfiles» в INSTALLED_APPS
. Затем вам нужно определить STATIC_ROOT
и STATIC_URL
. Стандартное расположение - это каталог уровня проекта с именем «static».
Вам также необходимо добавить обработчик контекста шаблона staticfiles:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'django.core.context_processors.static',
)
Это сделает переменную STATIC_URL
доступной в ваших шаблонах, чтобы вы могли ссылаться на свои ресурсы с помощью чего-то вроде {{ STATIC_URL }}css/style.css
Все ваши статические ресурсы также должны быть помещены в каталог уровня приложения с именем "static". Фактический «статический» каталог корневого уровня проекта никогда не используется напрямую. Это просто место, где команда управления collectstatic
сбрасывает все ваши статические ресурсы для использования в работе.
Если вам нужны статические ресурсы всего проекта (не привязанные к какому-либо конкретному приложению), вам потребуется совершенно отдельный каталог (т. Е. Не такой, как MEDIA_ROOT
или STATIC_ROOT
). Я склонен использовать один под названием «активы». Затем вам нужно будет указать Django, чтобы он искал здесь статические ресурсы, а также установил STATICFILES_DIRS
:
STATICFILES_DIRS = (
os.path.join(os.path.dirname(__file__), 'assets'), # or whatever you named it
)
MEDIA_ROOT
/ MEDIA_URL
теперь используются только для пользовательских загрузок (например, любой файл, созданный с помощью FileField
s и ImageField
s, так что он вам все еще нужен, но вы никогда не будете ничего хранить там вручную.
Когда вы дойдете до производства, ваш веб-сервер должен будет обслуживать как MEDIA_ROOT
и STATIC_ROOT
при MEDIA_URL
и STATIC_URL
соответственно. Вам также нужно будет запустить:
$ python manage.py collectstatic
Чтобы Django скомпилировал все ваши статические файлы в каталог, указанный в STATIC_ROOT
.