代码之家  ›  专栏  ›  技术社区  ›  Chris Withers

%url admin:index%生成错误的url

  •  0
  • Chris Withers  · 技术社区  · 16 年前

    我的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的链接。 奇怪的是,管理界面本身的URL是正常的。

    我正在使用:

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

    有人能告诉我我做错了什么吗?

    干杯,

    克里斯

    2 回复  |  直到 16 年前
        1
  •  0
  •   Chris Withers    16 年前

    这是Django中的一个bug,请参见:

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

    问题是,由于我需要在虚拟主机的其他地方进行重写,因此打开了Apache的重写引擎,所以设置了script_URL环境变量。但是,当通过Apache向/project发出请求时,路径_info为空,这会导致脚本_name被错误地设置为空字符串。

    在修复此bug之前,将以下rewriterule插入Apache配置将通过确保路径信息永远不为空来安全地解决问题。

    RewriteEngine On 
    RewriteRule ^/project$ /project/ [R]
    WSGIScriptAlias /project /django/project/bin/django.wsgi
    
        2
  •  -1
  •   kibitzer    16 年前

    你的Django实例对 /studio 在wsgi中处理的URL的一部分。您必须手动在模板中或(更好的是)在urls.py中预先处理它:

    在PysP.Py:

    BASE_URL = '/studio'
    

    在ULLS.PY:

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

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