在mod_wsgi中,Flask的request.path和url_for不匹配

6 投票
1 回答
10452 浏览
提问于 2025-04-17 17:11

在Flask中,有没有办法获取包含任何“装饰”的请求路径,这些装饰可能是WSGI或者其他东西添加的?

在测试模式下(只是在5000端口上),我的request.pathurl_for('settings')完全匹配,但一旦在WSGI下运行,正如预期的那样,我的url_for('settings')变成了/manage/settings/,而request.path却显示为/settings/

我在我的httpd.conf中有以下配置,并且正在将一个应用程序从开发环境迁移到上线环境。

WSGIScriptAlias /manage /sw/servermanager/servermanager.wsgi
WSGIDaemonProcess servermgr user=user group=grp threads=4
<Directory /sw/servermanager>
    WSGIProcessGroup servermgr
    WSGIApplicationGroup %{GLOBAL}
    WSGIScriptReloading On
    Order deny,allow
    Allow from all
</Directory>

我喜欢让模板尽量通用,然后使用CSS动态显示导航信息的想法。我使用了这个答案中提供的技术来构建我的视图,但当我把mod_wsgi加入进来时,就出现了问题。

我查看了一下请求对象,但没有找到太多我想要的信息,除了可能使用url_rule,但那里的参数让我有点困惑。

为了保险起见,这里有我正在使用的WSGI脚本的链接:https://github.com/FernFerret/servermanager/blob/master/servermanager.wsgi

我也对request对象的文档感兴趣,我是通过使用内置调试器和help(request)来了解它的。

编辑:我应该说,在运行mod_wsgi的Apache下,网址并不匹配。

1 个回答

10

这其实是一个功能,而不是一个错误。你可以查看文档,了解请求中的与URL相关的属性,以及请求对象本身

你可能想用 request.script_root + request.path 这个组合。

撰写回答