Django Admin:看不到任何应用(权限问题?)

6 投票
5 回答
10832 浏览
提问于 2025-04-15 17:10

我有一个用Django搭建的网站,里面运行着一些自定义的应用。我之前没有使用Django的ORM,只是用了一些视图和模板,但现在我需要存储一些信息,所以我在一个应用里创建了一些模型,并启用了后台管理。

问题是,当我登录后台管理时,它只显示“你没有权限编辑任何内容”,连认证应用都没有出现在页面上。我使用的是用syncdb创建的超级用户。

在同一台服务器上,我还有另一个网站,后台管理运行得很好。

我使用的是Django 1.1.0,服务器环境是Apache/2.2.10 mod_python/3.3.1,Python版本是2.5.2,数据库是psql(PostgreSQL)8.1.11,操作系统是Gentoo Linux 2.6.23。

有没有什么建议可以帮我找到解决方案?

非常感谢。

更新:在开发服务器上可以正常工作。我猜这可能和某些文件系统的权限有关,但我就是找不到。

更新2:虚拟主机的配置文件:

<Location />
  SetHandler python-program
  PythonHandler django.core.handlers.modpython
  SetEnv DJANGO_SETTINGS_MODULE gpx.settings
  PythonDebug On
  PythonPath "['/var/django'] + sys.path"
</Location>

更新3:更多信息

  • /var/django/gpx/init.py 文件存在且是空的
  • 我在 /var/django/gpx 目录下运行 python manage.py
  • 这个网站是GPX,其中一个应用是contable,位于 /var/django/gpx/contable
  • apache用户属于webdev组,所有这些目录和文件都属于这个组,并且有读写权限

更新4:确认设置文件在apache和runserver中是一样的(我重命名后两个都出错了)

更新5:/var/django/gpx/contable/init.py 文件存在

这是urls.py中相关的部分:

urlpatterns = patterns('',
                       (r'^admin/', include(admin.site.urls)),
                      )
urlpatterns += patterns('gpx',
   (r'^$',                         'menues.views.index'),
   (r'^adm/$',                     'menues.views.admIndex'),

5 个回答

2

确保你已经把你的应用程序添加到 settings.INSTALLED_APPS 里。

Django 的管理后台首页模板内容是:

{% if app_list %}
    {% for app in app_list %}
    ...
{% else %}
    <p>{% trans "You don't have permission to edit anything." %}</p>
{% endif %}

这可能就是你的问题所在。


补充说明:要么是这个,要么就是你没有以你所说的用户身份登录。你能查看一下数据库,确认一下相关用户的 auth_user.is_superuser 值是否为 1 吗?


补充说明:如果你的用户的 is_staff 和 is_superuser 在数据库中都标记为 1,并且你确认自己是以该用户身份登录的;那么有可能你只是在生产环境中(也就是在 apache 下)看到这个问题,而你的生产环境的 settings.py 和开发环境的设置不同?


补充说明:所以你在开发和生产环境中表现不同。我能想到两种情况:

a) 你的生产环境有不同的 settings.py。你能编辑一下你的问题,展示一下 httpd.conf 中相关的部分吗?应该是类似这样的:

<Location "/mysite/">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonOption django.root /mysite
    PythonDebug On
</Location>

另外,你的 PYTHONPATH 是什么?

SetEnv 行在说什么?它指向的模块和你在开发环境中的是同一个吗?你确定在你的 PYTHONPATH 中有 mysite.settings 这个文件吗?

b) 你的生产环境中有 PYTHONPATH 的问题,导致找不到应用程序。不过这应该会产生更严重的错误……


问题:

  • /var/django/gpx 里有一个 init.py 文件吗?
  • /var/django/gpx/settings.py 是和你运行 manage.py runserver 时用的是同一个文件吗?
  • 你在 /var/django/ 下的应用程序叫什么名字?
  • 你运行 Apache 的用户对这些目录有权限吗?
12

听起来你还没有在管理后台注册任何应用(在这个概述的第5步中提到)。

试着在你的主urls.py文件中添加这一行 admin.autodiscover(),记得先写 from django.contrib import admin

比如说:

# Other imports...
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    ('^admin/', include(admin.site.urls)),
    # Other URL patterns...
)

你也可以单独用 admin.site.register(YourModel) 来注册你的模型。

23

希望这能帮助到某些人。我们遇到了同样的问题,因为有人在settings.py文件中添加了一个不同的身份验证后端,但没有保留默认的ModelBackend。我们把设置改成:

AUTHENTICATION_BACKENDS = (
    'auth.authentication.EmailBackend',
    'django.contrib.auth.backends.ModelBackend',
)

这样就解决了我们的问题。

撰写回答