Почему я не могу заставить свой статический каталог работать с django 1.3?

Эта проблема очень простая, но я просто не могу ее понять

добавлен в мои шаблоны URL

url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/home/user/www/site/static'})

где мой main.css: /home/user/www/site/static/css/main.css

когда я получаю доступ к http://localhost:8000/static/

Я получаю: 404: Индексы каталогов здесь не разрешены.

когда я получаю доступ к http://localhost:8000/static/css/main.css

Я получаю: 404: 'css / main.css' не может быть найден

Что я делаю неправильно?

Починил это:

url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT } ),

в settings.py

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = os.path.join(CURRENT_PATH, 'static') #=='/home/user/www/site/static'

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/mystatic/'

Как видите, единственное, что я действительно изменил, - это со STATIC_URL = '/ static /' на STATIC_URL = '/ mystatic /'

примечание: когда я дошел до http://localhost:8000/mystatic ... я получаю те же ошибки, что и выше

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

Почему это работает?


person Derek    schedule 15.06.2011    source источник


Ответы (3)


Если вы используете встроенный веб-сервер разработки (т.е. запускаете его с manage.py runserver), Django позаботится о статических файлах во время разработки.

Обратите внимание, что STATIC_ROOT - это путь, по которому Django собирает статические файлы, а не путь, из которого он обслуживает файлы. Вы не должны поддерживать себя STATIC_ROOT! Подробнее об этом можно прочитать в документации Django.

В общем, вам не нужно добавлять django.views.static.serve к вашим URL-адресам со встроенным сервером.

Статические файлы следует размещать в другом месте, кроме STATIC_ROOT. Вы можете разместить их либо по пути myapp/static (то есть под статическим файлом отдельного приложения). Вы также можете выделить статическую папку для всего проекта (например, /path/to/project/proj_settings) и обновить STATICFILES_DIRS в settings.py, чтобы он был:

STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(PROJECT_DIR, 'proj_static'),
)

Затем вы можете поместить свой css/main.css файл в /proj_static/css/main.css. Встроенный веб-сервер Django будет сервером /static/ оттуда.

Во время производства вы должны собрать все статические файлы в STATIC_ROOT, запустив manage.py collectstatic. Затем вы можете обслуживать эту папку непосредственно через свой веб-сервер (например, nginx, Apache), а не через Django.

person notnoop    schedule 15.06.2011
comment
@notnoop Как указать файл, который автоматически включается в каталог myapp/static? т.е. myapp/static/file1 отображается просто как STATIC_URL/file1? - person Dave; 17.07.2012

в основном два шага:

  1. # P2 # Файл существует? /home/user/www/site/static/css/main.css

    если нет, вы должны запустить "python manage.py collectstatic", чтобы скопировать статический файл в путь STATIC_ROOT

    , если "collectstatic" может ' t скопируйте файлы css в путь STATIC_ROOT, затем проверьте исходный путь css в "STATICFILES_DIRS"

  2. # P3 # a) settings.py: INSTALLED_APPS включают: 'django.contrib.staticfiles'

    b) urls.py: urlpatterns + = staticfiles_urlpatterns ()

Я думаю, вы не настраиваете шаг 2.b. ваш метод должен быть в порядке, но он жестко запрограммирован,

url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT } ),

В документе django уже упоминалось:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
person raidsan    schedule 20.07.2011

Вы должны настроить STATIC_URL в settings.py

В вашем случае это должно быть

STATIC_URL = '/static/'
person tony    schedule 15.06.2011
comment
STATIC_URL уже установлен на это, у меня также есть STATIC_ROOT = os.path.join (CURRENT_PATH, 'static /'), что означает STATIC_ROOT = / home / user / www / site / static /, подтвердите это, когда я напечатал его в html - person Derek; 16.06.2011
comment
Я не уверен, но попробуйте написать его без косой черты: STATIC_ROOT = os.path.join (CURRENT_PATH, 'static'), а также лучший способ - импортировать эту переменную в urls.py и использовать ее там. - person tony; 16.06.2011
comment
вы можете прочитать мой вопрос об этом ЗДЕСЬ, возможно, что-то поможет вам. Как обычно, я помещаю статические файлы в каталоги приложений, и это нормально. - person tony; 16.06.2011
comment
Я решил использовать статическую папку в основном каталоге, а затем подпапки в статической папке, чтобы разделить файлы. - person Derek; 16.06.2011