Ошибка в Django Admin CSS
Я возился с новой командой collectstatic
и получил ее работу для моих обычных страниц. То есть, я могу загрузить мой css в этом месте http://localhost:8000/static/css/main.css
. Однако, css для моего администратора django, похоже, не появляется.
Когда я перехожу к адресу admin css в http://localhost:8000/static/admin/css/base.css
, я получаю 404 страницу, не найденную со следующей ошибкой: /home/nai/GitProjects/cats/django-trunk/django/contrib/admin/media/css/base.css" does not exist
. В django-trunk у меня никогда не было папки /home/nai/GitProjects/cats/django-trunk/django/contrib/admin/media/
.
Это странно?
В любом случае, в моей статической папке есть папка администратора с сопровождающими папками css, img и js, которые были созданы, когда я запустил collectstatic, и URL-адрес base.css, похоже, указывает на это местоположение.
Это происходит на моем сервере разработки django. Вот некоторые фрагменты, которые помогут в поиске ошибок:
URLs
33 # In order for Dev Server to serve media files for the frontend site.
34 urlpatterns += staticfiles_urlpatterns()
35
36 try:
37 if settings.DEBUG: # defined in manage.py when the first arg is "runserver"
38 urlpatterns += patterns('',
39 (r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
40 (r'^media-admin/(?P<path>.*)$', 'django.views.static.serve',{'document_root': os.path.join(settings.MEDIA_ROOT, '..', settings.ADMIN_MEDIA_PREFIX)}),
41 )
42 except NameError:
43 pass
Я думаю, что это может быть связано с строкой 40 в моем файле URLS, но изменение media-admin на static/admin не помогло.
Настройки
58 ADMIN_MEDIA_PREFIX = '/static/admin'
69 STATIC_ROOT = os.path.join(os.path.abspath(os.path.join(PROJECT_ROOT, '..', MEDIA_DIR, 'static')), '')
70
71 # URL prefix for static files.
72 # Example: "http://media.lawrence.com/static/"
73 STATIC_URL = '/static/'
74
75 # Additional locations of static files. Global files are stored in here
76 STATICFILES_DIRS = (
77 os.path.join(os.path.abspath(os.path.join(PROJECT_ROOT, '..', 'proj_public', 'static', 'proj')), ''),
78 )
79
Ответы
Ответ 1
Django рекомендует развертывать статические файлы на веб-сервере, отличном от wsgi.
- В settings.py установите:
STATIC_ROOT = 'static'
-
Запустите python manage.py collectstatic
, который скопирует статические файлы администратора Django в /path/to/project/static/
-
Настройте статический файловый сервер. Если вы используете Nginx, вы можете добавить эту конфигурацию:
location /static/ {
alias /path/to/project/static/;
expires modified +1w;
}
-
Перезагрузите ваш веб-сервер
Теперь у вас должен быть доступ к статическим файлам.
Ответ 2
В Django 1.4 ADMIN_MEDIA_PREFIX
устарел. Вот шаги, которые я выполнил, чтобы догнать эти несколько недавние изменения Django:
-
в settings.py
, добавьте django.contrib.staticfiles
в INSTALLED_APPS
-
in settings.py
define STATIC_URL
- приложение staticfiles не будет работать без него. При использовании runserver
они будут обрабатываться магически, но при развертывании это должно быть местоположение, в котором эти ресурсы могут быть выбраны браузером.
Я думаю, что все было в этом.
Ответ 3
Я использую Django 1.4.3
Что НЕ работало для меня:
Независимо от того, насколько я редактировал ADMIN_MEDIA_PREFIX в settings.py, я не заметил изменений в HTML, сгенерированных для страниц администратора Django. Он всегда говорит /media/admin/base.css, когда я просматриваю источник.
Что DID работает для меня.
Скопировала папку "admin" с /django/contrib/admin/static/
и вставляла ее в папку с медиафайлами моих проектов
Теперь он отлично работает.
Ответ 4
Это кажется глупым, но на самом деле у меня была именно эта проблема, и решение было установить DEBUG=False
в DEBUG=True
в моей локальной среде разработчика. Когда для debug установлено значение False, он думает, что это в производственной среде, которая полагается на место для размещения статических файлов, таких как /var/www/html/static
, тогда как для отладки, установленной в True, просто используется локальный каталог.
Ответ 5
В настройке ADMIN_MEDIA_PREFIX
вам понадобится конечная косая черта.
Изменить на:
ADMIN_MEDIA_PREFIX = '/static/admin/'
Ответ 6
Я использую повара для автоматического создания моего сервера django на сервере AWS Ubuntu. Этот пост помог, но то, что я сделал, это добавить каталог в статические страницы администратора пакета в файле local_setings.py:
https://github.com/jaycrossler/geoq-chef-repo/blob/master/cookbooks/geoq/templates/default/local_settings.py.erb#L16
(added to local_settings.py or to settings.py):
STATICFILES_DIRS = ('<%= node['geoq']['virtualenv']['location'] %>/local/lib/python2.7/site-packages/django/contrib/admin/static/',)
В результате появился файл local_settings.py, имеющий:
STATICFILES_DIRS = ('/var/lib/geoq/local/lib/python2.7/site-packages/django/contrib/admin/static/',)
Обратите внимание, что если у вас есть другие элементы уже в STATICFILES_DIRS, вы можете захотеть добавить их в список, а не перезаписать его.
Ответ 7
в моем проекте решение находится в settings.py
, установите:
DEBUG = False # debug false mod not working css
Ответ 8
Также убедитесь, что AppDirectoriesFinder не комментируется, происходит, когда вы пытаетесь настроить собственную структуру приложения. К сожалению, бессмысленно искать такую информацию в официальных документах.
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]
Ответ 9
В settings.py
Не используйте кортеж для
STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), )
вам следует использовать список, например
STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ]