Django {%url管理员:索引%}生成错误的url

Django {%url管理员:索引%}生成错误的url,django,django-urls,Django,Django Urls,我的django站点在Apache的配置中提供了以下内容: WSGIScriptAlias /studio /django/studio/bin/django.wsgi My URL.py看起来像: urlpatterns += patterns( 'django.contrib', (r'^admin/', include(admin.site.urls)), (r'^accounts/login/$', 'auth.views.login'), (r'^ac

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

WSGIScriptAlias /studio /django/studio/bin/django.wsgi
My URL.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>]
谁能告诉我我做错了什么

干杯


Chris

您的Django实例对URL的
/studio
部分一无所知,因为它是在WSGI中处理的。您必须在模板中或更好的情况下,在URL.py中手动添加前缀:

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

BASE_URL = '/studio'
在URL.py中:

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

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

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

问题在于,由于我需要在虚拟主机的其他地方进行重写,Apache的重写引擎处于打开状态,因此设置了SCRIPT_URL环境变量。但是,当通过Apache向/project发出请求时,PATH_INFO为空,这会导致将SCRIPT_NAME错误地设置为空字符串

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

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

Django确实知道“/studio”,它是在SCRIPT_NAME WSGI变量中传递的。如果Django仍然没有在需要的时候自动遵守,那么Django可以说已经破产了。Django的这些问题本应在1.0候选版本中修复。我建议大家在Django用户邮件列表中关注这个问题。kibitzer:很抱歉,但在Django 1.1的上下文中,你的答案显然是错误的。不需要任何基础URL,同时以下解决方法也有效:就在我添加的WSGIScriptAlias上方:RewriteRule^/newstudio$/newstudio/[R]当我找到问题的根源时,我会在这里发布答案……这不是完全错误的,它是有效的。是的,它不是完美的,但是你的重写规则与解决你的问题完全无关。事实上,它是完美的,请看我将要发布的答案。