Невозможно обслуживать контент из / static URL root на сервере разработки Django - PullRequest
4 голосов
/ 02 апреля 2011

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

Мой urls.py выглядит так:

if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.STATIC_ROOT, 'show_indexes': True}),
        (r'^media/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
        (r'^admin_media/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.ADMIN_MEDIA_ROOT}),
    )

Если я захожу в / static /, я получаю список файлов. Например, в моем корневом каталоге есть файл «iphone.png». Переходя к /static/iphone.png я получаю сообщение 404.

Если я изменю этот раздел на:

if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^otherstatic/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.STATIC_ROOT, 'show_indexes': True}),
        (r'^media/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
        (r'^admin_media/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.ADMIN_MEDIA_ROOT}),
    )

Все, что связано с / otherstatic / работает чудесно.

Я также должен добавить, что с / media / или /admin_media/.

проблем не было

Это связано с новым приложением staticfiles в Django? (Если так, то кто подумал, что было бы хорошей идеей полностью разбить этот очень простой вариант использования?)

Спасибо!

Ответы [ 2 ]

5 голосов
/ 03 апреля 2011

В Django 1.3 с django.contrib.staticfiles в INSTALLED_APPS платформа будет искать все статические файлы во всех приложениях, которые имеют статическую папку.

Внимательно прочитайте первую точку, вторую строку .

Вот пример:

project/
    yourapp/
        static/
            iphone.png
    settings.py

Предполагая, что yourapp находится в вашем INSTALLED_APPS, вы сможете получить доступ к изображению iphone.png по следующему адресу:

http://localhost:8000/static/iphone.png

В вашем случае, если вы хотите, чтобы приложение staticfiles осуществляло поиск файлов в project/static/, вам необходимо добавить следующее в settings.py:

import os
SITE_ROOT = os.path.realpath(os.path.dirname(__file__))

STATICFILES_DIRS = (
    os.path.join(SITE_ROOT, 'static'),
)

Будьте осторожны с вышесказанным, убедитесь, что ни один из путей в STATICFILES_DIRS не соответствует пути, который вы указали в STATIC_ROOT. Последний в основном используется в производстве.

Не стесняйтесь удалять строку static из вашего проекта urls.py после установки STATICFILES_DIRS.

1 голос
/ 03 апреля 2011

Если вы не используете другой сервер разработки, вам не нужно ничего добавлять в свой urlconf для обслуживания статических файлов в директории STATIC_ROOT.

http://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#s-static-file-development-view

Это представление автоматически включается runserver (с параметром DEBUG, установленным в Правда). Чтобы использовать вид с другой локальный сервер разработки, добавить следующий фрагмент в конец вашей основной конфигурации URL:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...