Django {%url管理员:索引%}生成错误的url
我的django站点在Apache的配置中提供了以下内容: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
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]当我找到问题的根源时,我会在这里发布答案……这不是完全错误的,它是有效的。是的,它不是完美的,但是你的重写规则与解决你的问题完全无关。事实上,它是完美的,请看我将要发布的答案。