Подтвердить что ты не робот

Ошибка в 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 
4b9b3361

Ответ 1

Django рекомендует развертывать статические файлы на веб-сервере, отличном от wsgi.

  1. В settings.py установите:

STATIC_ROOT = 'static'

  1. Запустите python manage.py collectstatic, который скопирует статические файлы администратора Django в /path/to/project/static/

  2. Настройте статический файловый сервер. Если вы используете Nginx, вы можете добавить эту конфигурацию:

    location /static/ {                              
        alias /path/to/project/static/;  
        expires modified +1w;                        
    }  
    
  3. Перезагрузите ваш веб-сервер

Теперь у вас должен быть доступ к статическим файлам.

Ответ 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'), ]