Django:管理站点未格式化。

3
我有一个基本上完全没有添加自己媒体或以任何方式自定义管理界面的django项目。使用python manage.py runserver命令运行服务器会得到一个格式良好的管理界面。但是,使用gunicorn_django命令运行服务器时则不会。为什么会这样,我该如何解决?
显然,这是找不到css文件的问题,但它们存储在哪里?我从未配置过此项,而MEDIA_ROOT设置为''
编辑:我只想知道django-admin是如何提供不存在的管理文件的... 我该如何让gunicorn_django也这样做?

为什么要踩我?也许我应该去ServerFault发帖?我几乎不是管理员,这只是我的项目。SuperUser?那里似乎不太合适。 - Claudiu
与这个问题相同:https://dev59.com/JU7Sa4cB1Zd3GeqP3Gjo - Jordan Reiter
2
我认为它被踩是因为这是一个非常基础的问题,有点接近RTFM。这是人们面临的问题,但Django文档和教程在这个主题上非常明确:https://docs.djangoproject.com/en/dev/howto/static-files/。 - Jordan Reiter
1
@Jordan:我明白你的意思。我的困惑在于我没有任何静态文件,我从来没有设置过它,也从未参与过,所以我不知道该去哪里查找。 - Claudiu
我只是想知道django-admin是如何提供不存在的管理文件的,以及如何让gunicorn_django做同样的事情? - Claudiu
5个回答

1
我也遇到了这个问题(因为我在对抗gunicorn进行一些开发),以下是如何删除admin-media魔法并通过urls.py像任何其他媒体一样提供admin媒体的方法:
import os

import django

...

admin_media_url = settings.ADMIN_MEDIA_PREFIX.lstrip('/') + '(?P<path>.*)$'
admin_media_path = os.path.join(django.__path__[0], 'contrib', 'admin', 'media')

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^' + admin_media_url , 'django.views.static.serve', {
        'document_root': admin_media_path,
    }, name='admin-media'),
    ...
)

另外: http://djangosnippets.org/snippets/2547/

当然,还有#include <production_disclaimer.h>


1

我认为最简单的方法是在nginx(你正在使用吗?!)配置文件中添加别名:

location /static/admin/ {
    alias /<path_to_your_admin_static_files>/;
}

它立即对我起作用了


1
如果您使用contrib.static,您需要执行一个collectstatic命令,以获取所有特定于应用程序的静态文件(包括管理员自己的)到由gunicorn提供服务的公共目录中。

我有Django 1.2版本... 我在哪里可以获取Django管理界面的静态文件? - Claudiu
打开shell,加载任何django包并打印其__file__属性,它将显示文件实际路径。查看其中并在提供的媒体中创建符号链接。 - rewritten

0

David Wolever的答案对我的安装来说很接近,但我认为在新版Django中某些路径可能已经改变了。特别地,我设置了

admin_media_path = os.path.join(django.__path__[0], 'contrib', 'admin', 'static', 'admin')

并且在urlpatterns中添加:

url(r'^static/admin/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': admin_media_path,
    }),

基于此处找到的信息:https://docs.djangoproject.com/en/dev/howto/static-files/ 对我来说是可行的,但比我喜欢的更加“神奇”。

0

好的,明白了。只需要在settings.py文件中添加这行代码即可:

MEDIA_ROOT = '/home/claudiu/server/.virtualenv/lib/python2.5/site-packages/django/contrib/admin/media/'

通过这种解决方案,您不会提供除管理媒体以外的任何内容... Django 1.2文档(https://docs.djangoproject.com/en/1.2//howto/deployment/modpython/#serving-the-admin-files)推荐的方法是将管理媒体链接到由服务器提供的文档根目录。在您的情况下,它设置为`MEDIA_ROOT = '/var/media'并将...django/contrib/admin/media/admin`符号链接到那里。 - rewritten
@saverio:我该如何区分管理媒体和我的媒体?如果我创建符号链接,它不会像 /var/media/admin 这样吗?如果 media_root 是 /var/media,它找不到它们吗? - Claudiu
管理媒体文件存放在/var/media/admin,其余文件存放在根目录/var/media。如果您将Django认证应用程序用作媒体根目录,则会失去提供其他媒体文件的能力。 - rewritten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接