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:“请求”未定义