django.core.urlresolvers.resolve在apache非root部署下解决不正确的行为

时间:2011-02-10 10:13:21

标签: python django apache mod-wsgi

当django应用程序部署在非root apache url( WsgiScriptAlias / suburl /path_to_django.wsgi )下 {%url%} 标记和< strong> django.core.urlresolvers.reverse 函数会考虑 SCRIPT_NAME 变量并返回 / suburl / path_to_my_view

形式的网址

但是,当我使用 django.core.urlresolvers.resolve 函数来解析这些网址时,会抛出错误。这迫使我在调用resolve之前删除生成的url的 SCRIPT_NAME 。这是预期的行为,还是我误解了一切?

问候。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题:

  • 我的apache config
  • 中定义了SCRIPT_NAME
  • django.core.urlresolvers.reverse之外的wsgi的调用没有添加前缀
  • 在任何视图或资源中,对同一方法的调用前缀为前缀

我设法使用下一行代码自动添加前缀:

# in settings.py
from django.core.urlresolvers import set_script_prefix
...
FORCE_SCRIPT_NAME = "your-prefix"
set_script_prefix(FORCE_SCRIPT_NAME)
...

第一行确保您的wsgi每次都使用您的前缀。第二个设置前缀,以便reverse找到它。

请注意,您需要在apache conf中使用相同的前缀。这有点多余,但我发现了更清洁的修复。