Django Apache/mod_python Admin CSS не отображается с таблицами администратора
У меня Windows XP/Django/apache/mod_python работает на localhost. Все части работают, за исключением CSS CSS не рендеринга. Администратор работает, но не форматирует html. Я сделал дополнения в:
settings.py
INSTALLED_APPS
'django.contrib.admin',
urls.py
from django.contrib import admin
admin.autodiscover()
(r'^admin/(.*)', admin.site.root),
conf/http.conf
<Location "/">
SetHandler python-program
PythonPath "['C:/django'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonDebug On
</Location>
<Location "/cpssite/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE myapplication.settings
PythonInterpreter /myapplication
PythonDebug On
</Location>
Я в тупике. Есть ли еще код, который я должен добавить где-нибудь?
Ответы
Ответ 1
Существует ли ваш ADMIN_MEDIA_PREFIX? Отличается ли она от MEDIA_URL? Включили ли вы завершающую косую черту? Обработано ли Apache для правильной работы с медиа-сервером?
Конфигурация Django по умолчанию имеет медиа-адрес администратора, расположенный в каталоге {Django install dir}/contrib/admin/media. ADMIN_MEDIA_PREFIX по умолчанию -/media/. Поэтому вам нужно добавить что-то подобное в конфигурацию Apache:
Alias /media/ /path/to/django/contrib/admin/media/
Это скажет Apache, что запросы на mysite.com/media/css/whatever.css означают, чтобы обслуживать /path/to/django/contrib/admin/media/css/whatever.css, что должно решить вашу проблему.
Ответ 2
У меня была такая же проблема, и следующая запись в http.conf отлично работала со мной:
<Directory "Path-to-python/Lib/site-packages/django/contrib/admin/media/">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
Alias /media/ "Path-to-Python/Lib/site-packages/django/contrib/admin/media/"
<Location "/mysite/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonOption django.root /mysite
PythonInterpreter mysite
PythonDebug On
PythonPath "['C:/Python/Django/apps'] + sys.path"
</Location>
Ответ 3
Вот моя конфигурация Apache, специфичная для Django. Обратите внимание: django обрабатывает каждый входящий URL-адрес сайта (location/), кроме носителя, где он отключен, и данные передаются из каталога медиа файлов django.
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
#PythonOption django.root /
PythonDebug On
PythonPath "['e:/dj'] + sys.path"
</Location>
Alias /media e:/dj/django-trunk/django/contrib/admin/media/
<Location "/media">
SetHandler None
</Location>
Ответ 4
Если вы не хотите, чтобы носители admin использовали каталог /media, вы можете указать ADMIN_MEDIA_PREFIX = 'admin_media', а затем создать ссылку/псевдоним с вашего веб-сервера, который перенаправляет вызовы на/admin_media/в/usr/share/pyshared/django/contrib/admin/media (в зависимости от вашей ОС) для вашего производственного сервера...
Ответ 5
Поскольку вопрос длится долгое время, это может быть не соответствующим ответом, но я помещаю эту информацию, чтобы помочь любому, кто случайно споткнется здесь, как и я.
Начиная с версии 1.4, параметр ADMIN_MEDIA_PREFIX устарел. Способы обслуживания статических и мультимедийных файлов с версией >= 1.4 описаны здесь
https://docs.djangoproject.com/en/dev/releases/1.4/#django-contrib-admin
https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/#serving-files
https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/#serving-the-admin-files
В принципе, его можно настроить в 4 этапа -
- Установите STATIC_ROOT, чтобы указать на каталог, который будет обслуживать все статические файлы вашего сайта.
- Установите STATIC_URL, для которого должно быть выполнено статическое содержимое.
- Запустить manage.py collectstatic
- Настройте ваш веб-сервер для обслуживания запросов STATIC_URL от STATIC_ROOT
То же самое для медиафайлов