gpt4 book ai didi

python - 从 WSGI 或 shell 调用时,Django 反向返回不同的值

转载 作者:行者123 更新时间:2023-11-28 16:30:37 26 4
gpt4 key购买 nike

我已经使用 mod_wsgi 在 Apache 服务器上部署了一个 Django 项目,使用前缀 URL /mysite,即我的 Apache 配置包含

WSGIScriptAlias /mysite /var/www/mysite/mysite/wsgi.py

当从 Web 服务器进程调用 reverse('myview')(来自 django.core.urlresolvers)时,它返回预期的 URL /mysite/myview,即包含前缀 URL。

但是,当 reverse('myview') 从脚本(例如 cronjob)而不是通过 Web 服务器进程调用时,仅返回 /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) 私有(private)的、未记录的函数,以及 2) 存储在线程局部变量中。

关于python - 从 WSGI 或 shell 调用时,Django 反向返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32340806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com