Django Admin:看不到任何应用(权限问题?)
我有一个用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 个回答
确保你已经把你的应用程序添加到 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 的用户对这些目录有权限吗?
听起来你还没有在管理后台注册任何应用(在这个概述的第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)
来注册你的模型。
希望这能帮助到某些人。我们遇到了同样的问题,因为有人在settings.py文件中添加了一个不同的身份验证后端,但没有保留默认的ModelBackend。我们把设置改成:
AUTHENTICATION_BACKENDS = (
'auth.authentication.EmailBackend',
'django.contrib.auth.backends.ModelBackend',
)
这样就解决了我们的问题。