Почему я не могу заставить мой статический каталог работать с django 1.3? - PullRequest
6 голосов
/ 16 июня 2011

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

добавлено в мои urlpatterns

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}} в вашемшаблоны ... Я действительно не понимаю, почему это исправление работало и почему я должен был внести изменения, которые я сделал ....

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

Ответы [ 3 ]

8 голосов
/ 16 июня 2011

Если вы используете встроенный веб-сервер разработки (т.е. запускаете его с 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.

0 голосов
/ 20 июля 2011

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

  1. проверьте путь STATIC_ROOT:

    Файл существует? /home/user/www/site/static/css/main.css если нет, вы должны запустить «python manage.py collectstatic», чтобы скопировать статический файл в STATIC_ROOT путь если «collectstatic» не может скопировать CSS-файлы в путь STATIC_ROOT, тогда следует проверить исходный путь CSS в «STATICFILES_DIRS»
  2. в envelop develop, (используйте runserver для запуска веб-сервера), убедитесь:

    a) settings.py: INSTALLED_APPS включает в себя: 'django.contrib.staticfiles' б) urls.py: urlpatterns + = staticfiles_urlpatterns ()

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

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

В документе Джанго уже упоминается:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
0 голосов
/ 16 июня 2011

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

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

STATIC_URL = '/static/'
...