Flask:请求变量中的当前页面

时间:2011-12-30 05:30:05

标签: flask jinja2

在模板中,如何获取我目前所在的页面?我宁愿不传递像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> 

6 个答案:

答案 0 :(得分:59)

只要您导入requestrequest.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] }}

这将仅返回“产品”