Ошибка администратора Django
Я видел это question и рекомендации от Django Projects здесь, но все еще не может заставить это работать. Мои страницы администратора Django не отображают CSS вообще.
![enter image description here]()
Это моя текущая конфигурация.
settings.py
ADMIN_MEDIA_PREFIX = '/media/admin/'
httpd.conf
<VirtualHost *:80>
DocumentRoot /home/django/sgel
ServerName ec2-***-**-***-***.ap-**********-1.compute.amazonaws.com
ErrorLog /home/django/sgel/logs/apache_error.log
CustomLog /home/django/sgel/logs/apache_access.log combined
WSGIScriptAlias / /home/django/sgel/apache/django.wsgi
<Directory /home/django/sgel/media>
Order deny,allow
Allow from all
</Directory>
<Directory /home/django/sgel/apache>
Order deny,allow
Allow from all
</Directory>
LogLevel warn
Alias /media/ /home/django/sgel/media/
</VirtualHost>
<VirtualHost *:80>
ServerName sgel.com
Redirect permanent / http://www.sgel.com/
</VirtualHost>
Кроме того, я также создал следующее, чтобы создать (я думаю) символическую ссылку
ln -s /home/djangotest/sgel/media/admin/ /usr/lib/python2.6/site-packages/django/contrib/admin/media/
UPDATE
В моем файле httpd.conf,
User django
Group django
Когда я запустил ls -l в каталоге /media
drwxr-xr-x 2 root root 4096 Apr 4 11:03 admin
-rw-r--r-- 1 root root 9 Apr 8 09:02 test.txt
Если этот пользователь root должен быть django вместо этого?
ОБНОВЛЕНИЕ 2
Когда я введу ls -la
в папку /media/admin
total 12
drwxr-xr-x 2 root root 4096 Apr 13 03:33 .
drwxr-xr-x 3 root root 4096 Apr 8 09:02 ..
lrwxrwxrwx 1 root root 60 Apr 13 03:33 media -> /usr/lib/python2.6/site-packages/django/contrib/admin/media/
Дело в том, что когда я перехожу к /usr/lib/python2.6/site-packages/django/contrib/admin/media/
, папка была пуста. Поэтому я скопировал папки CSS, IMG и JS из моей установки Django в /usr/lib/python2.6/site-packages/django/contrib/admin/media/
, и он все еще не работал.
Ответы
Ответ 1
В дополнение к исправлению символической ссылки, предложенной Daniel Roseman, вам нужно убедиться, что пользователь, на котором запущен Apache, имеет доступ к доступу к медиа-ресурсу администратора.
- Если вы используете
ls -l
в своем медиа-каталоге, вы видите символическую ссылку?
- Если вы
cd admin
из своего медиакаталога, это работает? Если вы затем запустите ls
, вы увидите медиа-интерфейс администратора?
- Доступен ли пользователь, который запускает Apache, доступ к средствам администрирования?
Если все это работает, то, пожалуйста, обновите свой вопрос с помощью вашей текущей конфигурации и результатов этих команд, и мы рассмотрим другой пример.
Ответ на обновление: Ок, разрешения выглядят нормально. Похоже, что структура каталогов в вашем медиа-каталоге немного неправильна.
Тот факт, что /usr/lib/python2.6/site-packages/django/contrib/admin/media/
был пустым, тоже тревожит. Как только вы решите ближайшую проблему, вы можете захотеть переустановить django в ожидаемом месте.
В любом случае, вот как выглядит структура:
$ cd media
$ ls -la
drwxr-xr-x 2 root root 4096 Apr 13 03:33 .
drwxr-xr-x 3 root root 4096 Apr 8 09:02 ..
lrwxrwxrwx 1 root root 60 Apr 13 03:33 admin -> /usr/lib/python2.6/site-packages/django/contrib/admin/media/
-rw-r--r-- 1 root root 9 Apr 8 09:02 test.txt
То есть внутри каталога media/
они должны быть ссылкой с именем admin
непосредственно в каталог /admin/media
вашей установки django.
Чтобы исправить то, что у вас есть, внутри каталога media/admin/
выполните:
rm media
cd ..
rmdir admin
а затем повторно создайте символическую ссылку, как это было предложено в ответе Даниэля Розмана.
Ответ 2
Здесь есть пара проблем, как с вашей символической ссылкой.
Во-первых, источник и цель должны быть в обратном порядке (я всегда сам ошибаюсь).
Во-вторых, вы использовали совершенно другой путь к тому, который вы указали в своем Apache conf - djangotest/sgelections
vs django/sgel
.
Сделайте это так:
cd /home/django/sgel/media/
ln -s /usr/lib/python2.6/site-packages/django/contrib/admin/media/ admin
Ответ 3
Простым решением является изменение строки в файле wsgi.py
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
становится
from django.core.wsgi import get_wsgi_application
from dj_static import Cling
application = Cling(get_wsgi_application())
Самый простой способ правильно настроить CSS-интерфейс. Приветствия
Ответ 4
Другой метод, который я только что нашел, и он выглядит как правильно поддерживаемый метод.
Убедитесь, что в настройках установлен модуль staticfiles. Также настройте опцию STATIC_ROOT.
https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#module-django.contrib.staticfiles
Создайте свою/статическую/папку и установите разрешения.
Настройте apache с помощью /static/alias.
alias /static <path to project root>/static/
<Directory "<path to project root>/static/">
Order deny,allow
Allow from all
</Directory>
затем из папки вашего проекта запустите
sudo python manage.py collectstatic [-n to do a dry run]
Все это выглядит так: копирование статических файлов admin в папку ваших проектов для веб-обслуживания.
Ответ 5
Итак, первое, что вы хотите сделать, это сменить каталог на вашу статическую папку и добавить символическую ссылку.
Я сделал это с виртуальной средой, поэтому я использую
ln -s ~/virtualenv/my-virtualenv/lib/python2.x/site-packages/django/contrib/admin/static/admin admin
Следующим шагом будет отредактировать ваш httpd.conf
Alias /static/admin/~/mysite/static/admin/
Перезапустите сервер Apache и вуаля!
Ответ 6
В Firebug используйте вкладку Net и просмотрите запросы, сделанные вашим браузером для файлов css. см. ответ на ваши запросы там. Я думаю, что вы найдете там проблему.
У меня недавно была такая же проблема. Проблема заключалась в том, что когда мой браузер запрашивал файлы css, в ответе содержалось содержимое моей страницы входа в проект. Теперь я не помню, как я решил свою проблему. Я попытаюсь вспомнить и опубликовать решение здесь.
Дайте мне знать, если у вас такая же проблема.
Ответ 7
У меня была такая же проблема, но ничто из этого не помогло. Оказалось, что моя версия граппелли устарела. (https://github.com/sehmaschine/django-grappelli) Я удалил его, а затем снова установил с более новой версией. pip install django-grappelli==2.4.4
Если вы используете админ-код, подобный мне, вы можете его обновить.
Ответ 8
Вы можете запустить
python
>>> import django
>>> print django.__file__
Другой вопрос: размещены ли ваши обычные носители в /home/django/sgel/media/work (т.е. обслуживаются Apache, как ожидалось?)
Ответ 9
Попробуйте добавить
Options FollowSymLinks
к
<Directory /home/django/sgel/media>
Order deny,allow
Allow from all
</Directory>
чтобы вы получили
<Directory /home/django/sgel/media>
Options FollowSymLinks
Order deny,allow
Allow from all
</Directory>
Ответ 10
Я не уверен, что это поможет, но в моем файле конфигурации у меня есть:
Alias /adminmedia/ /var/lib/python-support/python2.6/django/contrib/admin/media/
<Directory "/var/lib/python-support/python2.6/django/contrib/admin/media">
AllowOverride None
Options FollowSymLinks
Order allow,deny
Allow from all
</Directory>
Это работает, но у меня установлен мой сервер только для разработки/тестирования.
Ответ 11
У меня была такая же проблема, я решил ее, используя FireBox FireFox, который сообщает вам, где ваш сайт ищет медиа файлы, а также как вы проверили содержимое папки admin/media, чтобы узнать, они были пусты?
Ответ 12
Я знаю, что он был решен, но я думаю, что он достоин поделиться своим решением.
Я просто добавил псевдоним в apache, и он работал до сих пор.
Alias /static/admin/ /usr/local/lib/python2.6/dist-packages/django/contrib/admin/media/
Alias admin/media/ /usr/local/lib/python2.6/dist-packages/django/contrib/admin/media/
Ответ 13
Попробовал ли вы установить значение для
MEDIA_ROOT
MEDIA_URL
ADMIN_MEDIA_PREFIX
правильно?
Я имею в виду, что URL MEDIA_ROOT и ADMIN_MEDIA_PREFX должны иметь другое значение. Проверьте эти значения в параметрах settings.py и повторите попытку.
Надеюсь, что это поможет.
Ответ 14
Я столкнулся с той же проблемой при запуске Bitnami Django Stack на Win32 (встроенный сервер разработки)
Я решил проблему, найдя недостающие папки CSS при установке и изменяя settings.py.
# Additional locations of static files
STATICFILES_DIRS = (
'C:/Program Files/BitNami DjangoStack/apps/django/django/contrib',
)
Это поможет вам приступить к разработке... Это не оптимально. Не забывайте конечную запятую:)
Ответ 15
Если ничего не помогает, добавьте следующее в urls.py
url(r'^media/(?P<path>.*)$', 'django.views.static.serve', { <br/>
'document_root': '/usr/lib/python2.4/site-packages/django/contrib/admin/media/', <br/>
'show_indexes' : True, <br/>
}), <br/>
Это не зависит от apache или nginx
Ответ 16
когда мы говорили о джанго, мы должны знать, в каком издании мы работаем. "ADMIN_MEDIA_PREFIX" используется в django до версии 1.4, см.
The included administration app django.contrib.admin has for a long time
shipped with a default set of static files such as JavaScript, images and
stylesheets. Django 1.3 added a new contrib app django.contrib.staticfiles
to handle such files in a generic way and defined conventions for static
files included in apps.
Starting in Django 1.4, the admin static files also follow this convention,
to make the files easier to deploy. In previous versions of Django, it was
also common to define an ADMIN_MEDIA_PREFIX setting to point to the URL where
the admin static files live on a Web server. This setting has now been deprecated
and replaced by the more general setting STATIC_URL. Django will now expect to
find the admin static files under the URL <STATIC_URL>/admin/.
https://docs.djangoproject.com/en/dev/releases/1.4/.
Я использую django 1.4 и все еще запутаюсь в этом.
Ответ 17
Если вы используете virtualenvwrapper
как я, тогда вы можете найти свои медиа файлы администратора и исправить его:
workon <project_name>
export DJANGO_BASEFILE=`python -c 'import django; print django.__file__'`
export DJANGO_BASEDIR=$(dirname ${DJANGO_BASEFILE})
ln -s $DJANGO_BASEDIR/contrib/admin/media <project_dir>/media/admin
Замените <project_name>
на ваше имя среды virtualenvwrapper и project_dir
на ваш рабочий каталог.:)