当 django 应用程序部署在非根 apache url 下(使用 WsgiScriptAlias/suburl/path_to_django.wsgi)时,{%url%} 标记和 < strong>django.core.urlresolvers.reverse 函数考虑了 SCRIPT_NAME 变量并返回 /suburl/path_to_my_view
形式的 url但是,当我使用 django.core.urlresolvers.resolve 函数解析这些 url 时,它会抛出错误。这迫使我在调用 resolve 之前去除生成的 url 的 SCRIPT_NAME。这是预期的行为还是我误解了一切?
问候。
最佳答案
我遇到了同样的问题:
- 在我的 apache 配置中定义的 SCRIPT_NAME
- 在
wsgi
之外调用django.core.urlresolvers.reverse
没有添加前缀 - 在任何 View 或资源中,对相同方法的调用都在前缀前加上
我设法使用下一行代码自动添加前缀:
# 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 中需要有相同的前缀。这有点多余,但我发现了更清晰的修复。
关于python - django.core.urlresolvers.resolve 在 apache 非 root 部署下的不正确行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4955763/