gpt4 book ai didi

python - 如何在 Flask 中动态添加项目到 jinja 变量?

转载 作者:太空宇宙 更新时间:2023-11-03 14:22:16 26 4
gpt4 key购买 nike

我正在使用 Flask 构建网站与其 jinja2 templating engine我正在动态构建菜单(as described here):

{%
set navigation_bar = [
('/', 'index', 'Home'),
('/aboutus/', 'aboutus', 'About Us'),
('/faq/', 'faq', 'FAQ')
]
%}

{% set active_page = active_page|default('index') -%}

<ul>
{% for href, id, title in navigation_bar %}
<li{% if id == active_page %} class="active"{% endif %}>
<a href="{{ href|e }}">{{ title|e }}</a>
</li>
{% endfor %}
</ul>

现在,如果用户已登录,我想显示一些额外的内容。所以在运行时我想将项目添加到 navigation_bar 变量。我试过这样的事情:

{% if g.user.is_authenticated() %}
{% navigation_bar.append(('/someotherpage', 'someotherpage', 'SomeOtherPage')) -%}
{% endif %}

但不幸的是,这会导致以下错误:TemplateSyntaxError: Encountered unknown tag 'navigation_bar'。 Jinja 正在寻找以下标签:'endblock'。需要关闭的最里面的 block 是'block'。

那么:有人知道我如何在运行时向 jinja2 变量添加额外的项目吗?欢迎所有提示!

[奖励问题]我也想知道,-{% set active_page = active_page|default('index') -%} 末尾做什么?

最佳答案

错误发生是因为 Jinja 无法识别 block 。每个 Jinja block 应该从 block 名称开始。 do 阻止 do extension满足您的需求。要使用它你应该添加对神社扩展做扩展。你可以这样做:

app.jinja_env.add_extension('jinja2.ext.do')

然后你就可以使用do extension了。您的示例应如下所示:

{% if g.user.is_authenticated() %}
{% do navigation_bar.append(('/someotherpage', 'someotherpage', 'SomeOtherPage')) %}
{% endif %}

Here's另一个简单的例子。

您会找到奖励问题的答案here .简而言之,- 从 block 的开头或结尾删除空格(这取决于它所在的位置)。

关于python - 如何在 Flask 中动态添加项目到 jinja 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25938080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com