评论在 jinja2 中不起作用
- 2025-04-10 09:44:00
- admin 原创
- 28
问题描述:
我有一个模板(test.html),如下所示:
{% extends 'base.html' %}
{% from "_formhelpers.html" import render_field %}
{% block content %}
<div class="container">
<div class="row">
<div class="span6 offset3">
<form class="form-horizontal" action="/create_user/" method="post">
{{ form.csrf_token }}
<dl>
{{ render_field(form.name) }}
{{ render_field(form.members) }}
<!--<div class="control-group">
<label class="control-label">
{{ form.task.label }}
</label>
<div class='controls'>
{{ form.task}}
{% if form.task.errors %}
<ul class="text-error">
{% for error in form.task.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>-->
</dl>
</form>
</div>
</div>
</div>
{% endblock %}
使用 Flask 的 render_template("test.html", form=form) 渲染此模板时,我收到以下错误“UndefinedError: 'tickapp.forms.TeamForm object' 没有属性 'task'”。如您所见,我在模板(整个)中注释掉了 'form.task',并且模型和我的表单中也没有这样的字段。
我想知道为什么 jinja2 会考虑注释的 html 内容。我信任注释(!)并花了几个小时解决这个问题。最后,删除了所有注释,它开始工作了。使用 jinja2 的任何人都遇到过这个问题吗?你知道为什么会这样吗?
解决方案 1:
基本上,jinja2 只关心查找和评估其自己的块,而不是 HTML 的结构。如果要完全排除模板的某个部分,可以使用 jinja2 的注释语法:
{# This is a comment now.
<div class="control-group">
...
</div>
#}
解决方案 2:
这是 Google 上“jinja 评论不起作用”的热门链接,所以我想描述另一个警告。
您可以使用{#
来开始注释,也可以#}
使用 来结束注释,就像前面提到的那样。但是,您不能嵌套注释。
也就是说,如果你有:
{# This does NOT comment out the whole block now.
<div class="control-group">
...
{# Inner comment that will stop the comment block here --> #}
...
</div>
#}
内部注释的注释结束符号将过早地结束该块。
因此,如果您有纯文本注释,仅注释 jinja 正在做的事情,您应该使用常规 HTML 注释<!-- Here's a text comment -->
来注释这些内容,以便您仍然可以根据需要注释掉块。
这可能是您对块评论的期望,但我第一次看到它时仍然感到困惑,所以我想我会提到它。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD