{%url admin:index%}生成错误的网址

时间:2009-12-25 00:33:55

标签: django django-urls

我的django站点在Apache的配置中提供以下内容:

WSGIScriptAlias /studio /django/studio/bin/django.wsgi

我的urls.py看起来像:

urlpatterns += patterns(
    'django.contrib',
    (r'^admin/', include(admin.site.urls)),
    (r'^accounts/login/$', 'auth.views.login'),
    (r'^accounts/logout/$', 'auth.views.logout'),
    )

......但是:

[<a href="{% url admin:index %}">admin</a>]

...生成指向/ admin而非/ studio / admin的链接。 奇怪的是,管理界面中的网址很好。

我正在使用:

Python 2.5.2-3
Django 1.1.1
mod_wsgi  2.5-1~lenny1
apache2 2.2.9-10+lenny6

谁能告诉我我做错了什么?

欢呼声,

克里斯

2 个答案:

答案 0 :(得分:0)

这是Django中的一个错误,请参阅:

http://code.djangoproject.com/ticket/12464

问题是因为Apache的重写引擎由于重写而需要在虚拟主机的其他地方执行,所以设置了SCRIPT_URL环境变量。但是,当通过Apache向/ project提出请求时,PATH_INFO为空,这会导致SCRIPT_NAME被错误地设置为空字符串。

在修复此错误之前,将以下RewriteRule插入Apache配置将通过确保PATH_INFO永远不会为空来安全地解决问题。

RewriteEngine On 
RewriteRule ^/project$ /project/ [R]
WSGIScriptAlias /project /django/project/bin/django.wsgi

答案 1 :(得分:-1)

您的Django实例对WSGI中处理的URL的/studio部分一无所知。您必须手动将其添加到模板中,或者更好地在urls.py中添加:

在settings.py中

BASE_URL = '/studio'
在urls.py中

r('^%s/admin/' % settings.BASE_URL, include(admin.site.urls)), ...

然后您的网址反转将按预期工作。管理员链接有效,因为一旦进入管理界面,所有链接都是相对的。