Django 1.7 - Обслуживание статических файлов

Я следую официальной документации для обслуживания статических файлов, но получаю ошибку 404 в консоли разработки. Я использую 'django.contrib.staticfiles', поэтому статические файлы должны автоматически обслуживаться. Это моя установка:

Настройки:

STATIC_ROOT = ''
STATIC_URL = '/static/'

Заголовок шаблона:

{% load staticfiles %}
<link rel="stylesheet" href="{% static "css/app.css" %}">

Дерево каталогов:

django_project
    \apps
    \static
        \css
            app.css
    \templates
        index.html

Я вижу в консоли Firefox, что путь к моему файлу правильный:

Поэтому проблема должна заключаться в том, что Django не обслуживает статические файлы. Я не могу найти то, что мне не хватает. Любой совет приветствуется.

4 ответа

Решение

РЕШЕНИЕ: мне не хватало этой строки в файле settings.py

STATICFILES_DIRS = (os.path.join(os.path.dirname(__file__),'static'),)

Похоже, это обязательно, так же, как TEMPLATE_DIRS.

Для тех, кто работает с django-cms и сталкивается с 404 ошибками (в частности, все ваши статические файлы имеют префикс "en-us" перед URL), я нашел следующие шаги, чтобы помочь.

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

urlpatterns = i18n_patterns('',
      url(r'^admin/', include(admin.site.urls)),
      url(r'^', include('cms.urls')),
)

вместо этого должно быть:

from django.conf.urls import patterns

urlpatterns = patterns('',
  url(r'^admin/', include(admin.site.urls)),
  url(r'^', include('cms.urls')),
)

Импорт важен, потому что конфигурация django-cms удаляет patterns импорт из django.conf.urls,

Это решило перенаправление, но все равно не нашло мои статические файлы. Мне нужно было вручную добавить статический URL в шаблоны URL, например так:

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('cms.urls')),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

После этого статические файлы работали как положено.

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

Это должно работать:)

settings.py

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'project', "static"),
)

пример context_processors из settings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    'django.core.context_processors.request',
    "django.core.context_processors.tz",
    "django.contrib.messages.context_processors.messages",
)

пример установленных приложений в settings.py:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

urls.py:

from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
    urlpatterns + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Когда вы запускаете collectstatic, он помещает все ваше статическое содержимое в путь, указанный в STATIC_ROOT. Проверьте развертывание в производственных документах

Если вы используете сервер django, попробуйте проверить путь, который генерируется {% static %}... у вас может быть косая черта или что-то пропущено.

Убедитесь, что вы выполняете все требования. Вам нужно иметь django.contrib.staticfiles в ваших установленных приложениях и что-то подобное в вашем основном файле urls:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Другие вопросы по тегам