Таблицы стилей Django для встроенного сайта администратора не загружаются на мой рабочий сервер, на котором работает Django 1.6. Я вижу, что многие другие люди сталкивались с этой проблемой, и я пробовал все решения, которые были им предоставлены, но ни одно из них не работает. Мой сайт Django работает поверх Gunicorn 19.1.1 за прокси-сервером Nginx v. 1.2.1.
Поскольку я собираюсь создать панель управления и буду использовать сайт администратора не только для управления моими пользователями, группами и моделями, я создал приложение для администрирования внутри своего сайта:
INSTALLED_APPS += ('apps.admin', )
Я переопределяю и расширяю некоторые шаблоны администратора Django и скопировал их из django.contrib.admin.templates здесь:
/www/site/apps/admin/__init__.py
/www/site/apps/admin/models.py
/www/site/apps/admin/views.py
/www/site/apps/admin/urls.py
/www/example/apps/admin/templates/admin/base.html
/www/example/apps/admin/templates/admin/base_site.html
/www/example/apps/admin/templates/admin/index.html
/www/example/apps/admin/templates/admin/my_dashboard.html # mine
Вот соответствующие настройки из моего файла urls.py
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# ...
url(r'^admin/', include(admin.site.urls)),
url(r'^admin/dashboard/$',
'apps.admin.views.dashboard',
{'template': 'my_dashboard.html'},
name='dashboard'),
)
Вот моя установка. Фактические статические файлы моего сайта находятся здесь:
/www/example/static/css
/www/example/static/js
Вот мой статический рут. В документации Django говорится, что он должен отличаться от того, где на самом деле расположены ваши статические файлы.
STATIC_ROOT = "/var/www/example/static/"
Префикс для моего статического URL:
STATIC_URL = '/static/'
Расположение статических файлов и средств поиска:
STATICFILES_DIRS = (
'/www/example/static'
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
Мой файл конфигурации Nginx:
upstream gunicorn {
server 127.0.0.1:8000 fail_timeout=0;
}
server {
listen 80;
server_name www.example.com;
rewrite ^/(.*) http://example.com/$1 permanent;
}
server {
listen 80;
server_name example.com;
root /www/example;
client_max_body_size 4G;
keepalive_timeout 5;
location /static/ {
alias /www/example/static/;
}
location /media/ {
alias /var/www/example/media/;
}
try_files $uri @django;
location @django {
proxy_pass http://gunicorn;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /www/example/static;
}
}
Я вижу, что сайт правильно является сервером моих статических файлов. Например, я вижу это изображение:
http://example.com/static/img/small_img.jpg
Но Nginx выдает ошибку 404, когда я пытаюсь получить доступ к таблице стилей Django ...
http://example.com/static/admin/css/base.css
... хотя просмотр исходного кода в моем браузере показывает эти ссылки:
<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css" />
<link rel="stylesheet" type="text/css" href="/static/admin/css/login.css" />
Вот еще что я сделал:
- Я подтвердил, что django.contrib.staticfiles и django.contrib.admin находятся в INSTALLED_APPS.
- Я вошел в оболочку Python и проверил свои настройки STATIC_ROOT, STATIC_URL и STATICFILES_DIR.
- Я запустил команду "collectstatic" на своем сервере и убедился, что она скопировала статические файлы административного сайта Django в мой STATIC_ROOT.
- Я попытался добавить дополнительную директиву местоположения в свой файл конфигурации nginx, как описано здесь и перезапустил мою службу Nginx.
- Я попытался создать каталог / www / example / static / admin, а затем создать в нем «статическую» символическую ссылку, указывающую на статический каталог ... / django / contrib / admin / static / в моем каталоге виртуальной среды.
- Я загрузил главную страницу администратора в Chrome с видимой консолью разработчика, чтобы увидеть, не произошло ли что-то странное, но он сообщил только об ошибках 404.
Я собираюсь попробовать «патч обезьяны», скопировав статические файлы Django в каталог статических файлов моего сайта и изменив hrefs в моей версии base.html. Однако это не лучшее решение.
Извините за такой длинный пост. Кто-нибудь может сказать мне, что я делаю не так? Помимо этого, сайт администратора, похоже, работает. Просто таблицы стилей не загружаются. Спасибо!
/www/example/static/
? Изменить: похоже, что вашSTATIC_ROOT
не соответствует псевдонимуlocation /static/
nginx. Вы пропали/var/
- person schillingt   schedule 12.02.2015