Flask Jinja 2渲染问题

时间:2019-04-03 14:43:39

标签: python flask jinja2

我确定我做错了。

{% block content %}
    <h1>Sign In</h1>
    <form action="" method="post" novalidate>
        {{ form.hidden_tag() }}
        <p>
            {{ form.username.label }}<br>
            {{ form.username(size=32) }}
        </p>
        <p>
            {{ form.password.label }}<br>
            {{ form.password(size=32) }}
        </p>
        <p>{{ form.remember_me() }} {{ form.remember_me.label }}</p>
        <p>{{ form.submit() }}</p>
    </form>
{% endblock %}
{% extends "base.html" %}

上面的代码给出以下输出:

enter image description here

这是正确的。但是当我将相同的代码更改为如下代码:

{% extends "base.html" %}
{% block content %}
    <h1>Sign In</h1>
    <form action="" method="post" novalidate>
        {{ form.hidden_tag() }}
        <p>
            {{ form.username.label }}<br>
            {{ form.username(size=32) }}
        </p>
        <p>
            {{ form.password.label }}<br>
            {{ form.password(size=32) }}
        </p>
        <p>{{ form.remember_me() }} {{ form.remember_me.label }}</p>
        <p>{{ form.submit() }}</p>
    </form>
{% endblock %}

输出变为:

enter image description here

我的base.html看起来像这样:

<div>
    <a href="/index">Home</a>
    <a href="/login">Login</a>
</div>

我敢肯定,我犯了一些愚蠢的错误,但似乎找不到。

如果我在代码之上从base.html复制代码,它将正确呈现。

希望有人可以提供帮助。

1 个答案:

答案 0 :(得分:1)

您需要在const formdata = [ {name: "gender", value: "F", focus: 0, type: "radio"}, {name: "firstname", value: "empty", focus: 0, type: "input"}, {name: "lastname", value: "empty", focus: 0, type: "input"}, {name: "birthday", value: "empty", focus: 0, type: "input"}, {name: "street", value: "empty", focus: 0, type: "input"}, {name: "streetNo", value: "empty", focus: 0, type: "input"}, ] let res = formdata.map(({name,value,focus,type}) => `${name}.${type}|${value}|${focus}`).join(';') console.log(res)

中覆盖一个内容块
base.html

您的<div> <a href="/index">Home</a> <a href="/login">Login</a> {% block content %}{%endblock%} </div> 中应包含用于您网站中各种内容块的块。
当您创建新页面并想要覆盖该内容或将内容添加到这些块时,您将像执行此操作一样扩展。

base.html

您可以在{% extends "base.html" %} {% block content %} Your content goes here {% endblock %} 中包含多个块,然后在需要时覆盖它们。
Jinja documentation

您可以将内容放入基本html的内容块中,然后添加到该内容中,而无需使用base.html函数覆盖它。

super()

上面对于脚本文件可能很方便。如果您有一些需要在整个站点范围内使用,而有些则仅在特定页面上。