从WSGI或shell调用时,Django反向返回不同的值
作者:互联网
我已经使用前缀URL / mysite使用mod_wsgi在Apache服务器上部署了Django项目,即我的Apache配置包含
WSGIScriptAlias /mysite /var/www/mysite/mysite/wsgi.py
当从Web服务器进程调用reverse(‘myview’)(来自django.core.urlresolvers)时,它将返回预期的URL / mysite / myview,即包括前缀URL.
但是,当从脚本(例如cronjob)而不是通过Web服务器进程调用reverse(‘myview’)时,仅返回/ myview而没有所需的前缀URL.我的示例脚本如下所示:
import sys
import os
import django
sys.path.append('/var/www/mysite')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
django.setup()
from django.core.urlresolvers import reverse
print reverse('myview') # prints '/myview'
在Web服务器上下文之外运行时,是否可以包含前缀URL,以便可以在两个上下文中运行相同的reverse(‘myview’)代码并返回相同的值?
解决方法:
Django仅在网络请求的上下文中需要SCRIPT_NAME.它是从WSGI环境或FORCE_SCRIPT_NAME设置中检索的,并在请求期间进行设置.
要手动设置脚本名称,请使用set_script_prefix():
from django.core.urlresolvers import set_script_prefix
set_script_prefix('/mysite')
请注意,这是1)未公开的私有函数,以及2)存储在线程局部变量中.
标签:apache,mod-wsgi,python,django 来源: https://codeday.me/bug/20191119/2038864.html