kra*_*r65 3 python variables list jinja2 flask
我正在使用Flask及其jinja2模板引擎构建一个网站,我正在动态构建菜单(如此处所述):
{%
    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 was looking for the following tags: 'endblock'. The innermost block that needs to be closed is 'block'.
所以:有人知道如何在运行时向jinja2变量中添加其他项吗?欢迎所有提示!
[奖金问题]我也想知道,到底做了-什么{% set active_page = active_page|default('index') -%}?
发生错误是因为Jinja无法识别阻止.每个Jinja块应该从块名称开始.do阻止扩展符合您的需求.要使用它,您应该为jinja扩展添加do扩展.你可以这样做:
app.jinja_env.add_extension('jinja2.ext.do')
然后你可以使用do扩展.您的示例应如下所示:
{% if g.user.is_authenticated() %}
    {% do navigation_bar.append(('/someotherpage', 'someotherpage', 'SomeOtherPage')) %}
{% endif %}
这是另一个简单的例子.
你会在这里找到你的奖金问题的 答案.简而言之,从块的开始或结束处移除空白(这取决于它所在的位置).-
| 归档时间: | 
 | 
| 查看次数: | 4200 次 | 
| 最近记录: |