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

Ошибка администратора 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/, и он все еще не работал.

4b9b3361

Ответ 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 на ваш рабочий каталог.:)