视图应仅包含与视图相关的逻辑:
- 视图用于处理请求并提供请求的数据
- 这包括检查用户授权/许可和处理给定的参数
- 如果请求的数据不是微不足道的,请将代码外包到更合适的位置(您的模型或表单定义或其他自定义位置)
外包计算以使它们可重用,并从您的视图中调用这些方法以保持它们的小。
不过,也许您还想要其他东西,即带有extends
和的模板include
。
extends
您可以为您的 HTML 代码创建基本布局并定义可以在其他地方呈现的特定块。例子?行。
base.html:
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{% block title %}My Site{% endblock %}</title>
</head>
<body>
<div id="header">
<h1>My Site</h1>
</div>
{% block content %}{% endblock %}
</body>
</html>
然后,在任何其他模板中,您可以覆盖我们在基本模板中定义的title
块content
:
{% extends "base.html" %}
{% block title %}My Page{% endblock %}
{% block content %}
<h2>My Page</h2>
<div>lorem ipsum</div>
{% endblock %}
此外,您可以创建如下子模板,我们将其命名为_item.html
:
<li class="item">
<span>{{ something.foo }}</span>
<strong>{{ something.bar }}</span>
</li>
您可以将该片段包含在任何其他模板中并传递任意数量的参数:
{% for something in mymodel.mym2mrelation.all %}
{% include "_item.html" with something=something only %}
{% endfor %}
当然,您可以将这两个概念结合起来。像这样:
{% extends "base.html" %}
{% block title %}My Page{% endblock %}
{% block content %}
<h2>My Page</h2>
<div>lorem ipsum</div>
<ul>
{% for something in mymodel.mym2mrelation.all %}
{% include "_item.html" with something=something only %}
{% endfor %}
</ul>
{% endblock %}
我希望这会有所帮助。