一个用于Flask应用根目录的Jinja变量

6

我一直在使用易上手的Flask系统开发应用程序,并使用jinja模板编写了一堆与Flask页面相对应的链接,这些链接的定义大致如下:

@app.route(/<var1>/<var2>)
...
...

在测试服务器上这些链接工作得很好,但是当我从代理后面的服务器移动时,我遇到了一个问题,即 href 链接没有考虑代理插入的额外目录名称。
#where a link should read:
server:/myapp/<var1>/<var2>
# it acually puts out:
server:/<var1>/<var2>

我的jinja模板看起来像这样,但我想知道是否有一种方法可以放置一个变量来指定根目录,而不是放置反斜杠。

{% block navigation %}
{% for record in db.values() %}
 <li><a href="/{{db.name}}/{{record.name}}">{{record.name}}</a></li>
{% endfor %}
{% endblock %}

任何帮助都将不胜感激。感谢Flask团队!
2个回答

6
首先,就像 @reclosedev 所说的那样,您可以使用 url_for 函数生成URL(假设视图函数名为myview):
<a href="{{ url_for('myview', var1=db.name, var2=record.name) }}">

其次,如果您在反向代理后面,请使用此装饰器包装WSGI应用程序,以更新请求环境,以便Flask生成正确的URL。

谢谢Alex,我实际上正在使用那个代码片段,但是我在模板中生成的链接没有更新到新位置。谢谢。 - zach

3
也许你正在寻找url_for函数?
<li><a href="{{ url_for('view_func_name', 
                        var1=db.name, 
                        var2=record.name) }}">{{record.name}}</a></li>

2
此外,如果您在反向代理后面,请查看此Flask代码片段 - Alex Morega
@AlexMorega,也许这段代码能够解决OP的问题,我认为应该作为答案发布。 - reclosedev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接