系统相关
首页 > 系统相关> > 从WSGI或shell调用时,Django反向返回不同的值

从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