我有两个文件:
base.html文件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{{title}}</title>
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
register.html
{% extends "base.html" %}
{% block content %}
<h1>Register</h1>
<form action="" method="post" name="register">
{{ form.hidden_tag() }}
{{ form.login.label }} {{ form.login(size=20) }}
{{ form.password.label }} {{ form.password(size=20) }}
<input type="submit" value="Register">
</form>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
它像这样呈现:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Register</title>
</head>
<body>
<h1>Register</h1>
<form action="" method="post" name="register">
<div style="display:none;"><input id="csrf_token" name="csrf_token" type="hidden" value="1393257771.168161##ce877b3519f192c05d3b409f3b7b07bb147dead7"></div>
<label for="login">login</label> <input id="login" name="login" size="20" type="text" value="">
<label for="password">password</label> <input id="password" name="password" size="20" type="password" value="">
<input type="submit" value="Register">
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我想实现这个目标:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Register</title>
</head>
<body>
<h1>Register</h1>
<form action="" method="post" name="register">
<div style="display:none;"><input id="csrf_token" name="csrf_token" type="hidden" value="1393257771.168161##ce877b3519f192c05d3b409f3b7b07bb147dead7"></div>
<label for="login">login</label> <input id="login" name="login" size="20" type="text" value="">
<label for="password">password</label> <input id="password" name="password" size="20" type="password" value="">
<input type="submit" value="Register">
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?我试过谷歌和搞乱模板缩进,也indent
过滤器似乎不适用于此.我不想对内部块中的缩进进行硬编码,因为如果我决定稍后更改基本中的格式和元素,那将会破坏.
Mid*_*ter 30
虽然我认为文档大小的增加是反对"正确"缩进文档的一个很好的论据,但jinja2实际上提供了一个函数来完成你的工作:
indent(s, width=4, indentfirst=False)
Run Code Online (Sandbox Code Playgroud)
你将在base.html
宏中使用它,如SO的答案所述.
无论如何我可能会把它变成一个宏并称之为render_register_form
:
{% macro render_register_form(form) %}
<h1>Register</h1>
<form action="" method="post" name="register">
{{ form.hidden_tag() }}
{{ form.login.label }} {{ form.login(size=20) }}
{{ form.password.label }} {{ form.password(size=20) }}
<input type="submit" value="Register">
</form>
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)
然后将其包含在需要的地方,例如,8个空格缩进,如:
{{ render_register_form(my_form)|indent(8, True) }}
Run Code Online (Sandbox Code Playgroud)
小智 14
I know, the question is rather old but I found a nice solution to this problem. You can apply filters to whole text blocks: Template Designer Documentation / Filters
{% filter indent(width=4) %}
{% include "./sub-template.yml.j2" %}
{% endfilter %}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19388 次 |
最近记录: |