Flask:请求变量中的当前页

Flask:请求变量中的当前页,flask,jinja2,Flask,Jinja2,在模板中,如何获取当前所在的页面?我不想传递像page这样的变量,尤其是当我知道一些请求时。xxx可以向我提供信息 <li {% if page=="home" %}class="active"{% endif %}> <a href="/">Home</a> </li>

在模板中,如何获取当前所在的页面?我不想传递像
page
这样的变量,尤其是当我知道一些
请求时。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> 





只要您导入了
请求
请求。路径
应包含此信息。

应用程序中第一个从flask导入请求。然后您可以使用它,而无需传递到模板:

<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> 
<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>
<li {% if request.url_rule.endpoint == "myblueprint.client_pipeline" %}class="active"{% endif %}>Home</li>





使用request.path似乎不是一种合适的方法,因为在更改URL规则或在子文件夹下部署站点时,您必须更新路径

改用request.url\u rule.endpoint,它包含独立于实际路径的实际端点名称:

(Pdb) request.url_rule.endpoint
'myblueprint.client_pipeline'
在模板中:

<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>
<li {% if request.url_rule.endpoint == "myblueprint.client_pipeline" %}class="active"{% endif %}>Home</li>
Home
祝你好运

试试看

<li {% if request.endpoint == "blueprintname.routename" %}class="active"{% endif %}>Home</li>
Home

这一个对我很有用。

为了避免使用硬编码的url,您可以使用
url\u 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 %}

如果url中有更多内容,也可以使用.split

例如:

/产品
/产品/添加
/产品/32432/编辑
/产品/32432/视图

{{ request.path.split('/')[1] }} {{request.path.split('/')[1]}
这将只返回“product”

注意,对于其他变量,这不是真的。这是因为
request
是模板上下文中的变量之一。这是正确的答案。其他的使用硬编码路径,这是一个非常糟糕的主意。这只适用于在页面的每个部分使用一条路径的情况。否则这就不是你想要的=\不,那不是真的。您可以在端点名称中有一些结构(如blueprint.subsection.page),并使用.startswith('blueprint.subsection')进行比较。仅举一个例子。
请求
已导入(到
*.py
文件中),但仍然收到错误:jinja2.exceptions.UndefinedError:“请求”未定义