假设我想在我的网站上重复一些简单的HTML结构。 例如,我想在“绿色框”中显示页面的某些部分。
实现此目标的第一个必要步骤是创建如下模板文件:
<!-- greenbox.html -->
<div style="background-color:#88ff88;"><br>
{% block content %}<br>
{% endblock %}<br>
</div>
然后每当我需要这个预定义模板时,我必须创建一个单独的模板,如下所示:
<!-- pagepart_1.html -->
{% extends "greenbox.html" %}
{% block content %}
This time I want to add this dummy text in here
{% endblock %}
<!-- pagepart_2.html -->
{% extends "greenbox.html" %}
{% block content %}
The second time I want to add some other text
{% endblock %}
包含绿色框的实际页面如下所示:
<html><head>My Page</head>
<body>
<h1>Page Title</h1>
{% include "pagepart_1.html" %}
<br /><br />
{% include "pagepart_2.html" %}
</body></html>
这种方法确实有效,但我认为它包含一些开销。 我可以避免为每个实例(pagepart_1.html,pagepart_2.html,...)创建单独的模板吗?
那么我可以让我的主页看起来像这样吗?
<html><head>My Page</head>
<body>
<h1>Page Title</h1>
{% unkowntag extend "greenbox.html" %}
{% block content %}
This time I want to add this dummy text in here
{% endblock %}
{% endunknowntag %}
<br /><br />
{% unkowntag extend "greenbox.html" %}
{% block content %}
The second time I want to add some other text
{% endblock %}
{% endunknowntag %}
</body></html>
非常感谢!
答案 0 :(得分:0)
这是您希望允许完全自定义内容区域的唯一可用方法。但是,如果您可以标准化内容,以便它始终显示无序列表,例如,您可以执行以下操作:
<!-- greenbox.html -->
<div style="background-color:#88ff88;"><br>
<ul>
{% for item in list %}
<li>{{ item }}</li>
{% endfor %}
</ul>
</div>
然后在你的模板中:
<!-- mypage.html -->
{% with something as list %}
{% include 'greenbox.html' %}
{% endwith %}
你可以做更复杂的结构甚至传递多个变量(在Django 1.3 +中):
<!-- greenbox.html -->
<div style="background-color:#88ff88;"><br>
<h2>{{ title }}</h2>
<img style="float:{{ float }};" src="{{ image }}" alt="{{ alt_text }}">
<p>{{ description }}</p>
</div>
<!-- mypage.html -->
{% with title=obj.title image=obj.image.name alt_text=obj.title float="left" description=obj.description %}
{% include 'greenbox.html' %}
{% endwith %}
答案 1 :(得分:0)
我会编写一个自定义标记,它会发出HTML并多次使用它。