在模板中,如何获取我目前所在的页面?我宁愿不传递像page
这样的变量,特别是当我知道某些request.xxx
可以向我提供信息时。
<li {% if page=="home" %}class="active"{% endif %}>
<a href="/">Home</a>
</li>
<li {% if page=="about" %}class="active"{% endif %}>
<a href="/about">About</a>
</li>
答案 0 :(得分:59)
只要您导入request
,request.path
就应包含此信息。
答案 1 :(得分:46)
您应用程序中来自flask的第一个导入请求。然后你可以使用它而无需传递给模板:
<li {%- if request.path == "/home" %} class="active"{% endif %}>
<a href="/">Home</a>
</li>
<li {%- if request.path=="/about" %} class="active"{% endif %}>
<a href="/about">About</a>
</li>
答案 2 :(得分:42)
使用request.path似乎不是一种正确的方法,因为在更改URL规则或在子文件夹下部署站点时,您必须更新路径。
请改用request.url_rule.endpoint,它包含与实际路径无关的实际端点名称:
(Pdb) request.url_rule.endpoint
'myblueprint.client_pipeline'
在模板中:
<li {% if request.url_rule.endpoint == "myblueprint.client_pipeline" %}class="active"{% endif %}>Home</li>
祝你好运!
答案 3 :(得分:6)
为避免使用硬编码网址,您可以使用url_for
功能,如下所示:
{% for ni in ['index', 'foo', 'bar', 'baz'] %}
<li {%- if request.path == url_for(ni) %} class="active"{% endif %}><a href="{{ url_for(ni) }}">{{ ni | capitalize }}</a></li>
{% endfor %}
在这种情况下,index,foo,bar和baz将是函数名,在你的python代码中使用如下:
@app.route('/')
def index():
答案 4 :(得分:3)
尝试
<li {% if request.endpoint == "blueprintname.routename" %}class="active"{% endif %}>Home</li>
这个对我有用。
答案 5 :(得分:0)
如果您的网址中包含更多内容,您也可以使用 .split 。
示例:
/产品
/ product / add
/ product / 32432 / edit
/ product / 32432 / view
{{ request.path.split('/')[1] }}
这将仅返回“产品”