2014-10-27 6 views
0

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

Настройки:

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 консоли, что путь к моему файлу является правильным:

enter image description here

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

+0

Я думаю, что у кода есть опечатка: '' {% static "css/app.css"%} "', вы должны заменить одну пару двойных кавычек одиночными кавычками. – jeff

ответ

5

РЕШЕНИЕ: я пропускал эту строку в моем settings.py

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

Он выглядит обязательным, как TEMPLATE_DIRS.

+0

Я также пытался использовать STATIC_ROOT, но он устарел в этой версии Django, поэтому нужны только STATIC_URL, STATICFILES_DIRS и DEBUG = True. – zen11625

0

При запуске collectstatic он помещает все ваши статические данные в путь, указанный STATIC_ROOT. Проверьте deploy to production docs

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

Проверьте, что у вас есть following all the requirements. Вы должны иметь 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) 
0

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

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) 
+2

На самом деле единственными вещами, которые вам нужны для обслуживания статических файлов в версии 1.7, являются STATIC_URL, STATICFILES_DIRS и django.contrib.staticfiles в ваших настройках. Тогда вам нужно использовать только статический файл в вашем шаблоне, например {% static "css/app.css"%}. К счастью, вам не нужно явно предоставлять статические файлы в urls.py, как в предыдущих версиях. –

0

Для тех, кто работает Джанго-CMS и испытывают 404 ошибки (в частности, все ваши статические файлы, имеющие «ан-нас» предваряется к URL), я нашел следующие шаги, чтобы помочь ,

Во-первых, отключите интернационализацию соответствия шаблонов в ваших URL-адресах.пй файл, as described here:

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')), 
) 

импорт является важным, так как конфигурация Джанго-ОГО удаляет 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. Но так как другие могут иметь те же проблемы, я размещаю их там как возможное, если не идеальное решение.