【问题标题】:Comments not working in jinja2评论在 jinja2 中不起作用
【发布时间】:2013-04-22 22:56:21
【问题描述】:

我有一个模板(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' has no attribute 'task'”。 如您所见,我在模板(整体)中注释掉了“form.task”,并且模型和表单中也没有这样的字段。

我想知道为什么 jinja2 会考虑带注释的 html 内容。我信任 cmets(!) 并在这个问题上花了几个小时。最后,删除所有 cmets 并开始工作。在 jinja2 工作的任何人都遇到过这个问题?你知道为什么会这样吗?

【问题讨论】:

    标签: python jinja2


    【解决方案1】:

    基本上,jinja2 只关心找到一个评估它自己的块,而不是 HTML 的结构。如果要完全排除模板的一部分,可以使用 jinja2 的comment syntax

    {# This is a comment now.
        <div class="control-group">
           ...
        </div>
    #}
    

    【讨论】:

    • 谢谢。我开始使用 jinja2 cmets。我在 Django 模板中没有发现任何此类问题,我认为 jinja2 应该允许 html 样式的注释而不是它们自己的注释样式。
    • 一年后下降...我不同意,@rajpy。我在谷歌上搜索将 cmets 添加到我的 jinja2 源而不实际在 HTML 中发出这些 cmets 时发现了这个问题(出于安全原因)。如果 jinja2 只知道和处理自己的语法,您将获得最大的灵活性。
    猜你喜欢
    • 2013-07-10
    • 2013-07-03
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多