Python 在Django模板中标记下n个元素
我试图找出当遇到特殊元素时,如何标记列表中接下来的n个元素 我有一个这样的数据结构Python 在Django模板中标记下n个元素,python,django,templates,Python,Django,Templates,我试图找出当遇到特殊元素时,如何标记列表中接下来的n个元素 我有一个这样的数据结构 [ {"type": "normal1", "text": "some text 1"}, {"type": "special", "text": "some text 2", "length": 2}, {"type": "normal1", "text": "some text 3"}, {"type": "header", "text": "some text 4"},
[
{"type": "normal1", "text": "some text 1"},
{"type": "special", "text": "some text 2", "length": 2},
{"type": "normal1", "text": "some text 3"},
{"type": "header", "text": "some text 4"},
{"type": "header", "text": "some text 5"},
]
<p class="normal1">some text 1</p>
<div class="special">
<h1>some text2</h1>
<p class="normal1">some text 3</p>
<h2 class="header">some text 4</h2>
</div>
<h2 class="header">some text 5</h2>
{% for line in line_list %}
{% if line.type == "special" %}
<h1>{{ line.text }}</h1>
{% elif line.type == "header" %}
<h2 class="{{ line.type }}">{{ line.text }}</h2>
{% else %}
<p class="{{ line.type }}">{{ line.text }}</p>
{% endif %}
{% endfor %}
其中类型是混合的,每个特殊元素的长度参数是任意的。长度参数意味着特殊节点“拥有”接下来的n个元素。每个普通类型在格式上的差异非常重要。我想要的是这样的输出
[
{"type": "normal1", "text": "some text 1"},
{"type": "special", "text": "some text 2", "length": 2},
{"type": "normal1", "text": "some text 3"},
{"type": "header", "text": "some text 4"},
{"type": "header", "text": "some text 5"},
]
<p class="normal1">some text 1</p>
<div class="special">
<h1>some text2</h1>
<p class="normal1">some text 3</p>
<h2 class="header">some text 4</h2>
</div>
<h2 class="header">some text 5</h2>
{% for line in line_list %}
{% if line.type == "special" %}
<h1>{{ line.text }}</h1>
{% elif line.type == "header" %}
<h2 class="{{ line.type }}">{{ line.text }}</h2>
{% else %}
<p class="{{ line.type }}">{{ line.text }}</p>
{% endif %}
{% endfor %}
一些文本1
一些文本2
一些文本3
一些文本4
一些文本5
我想不出怎么把潜水艇弄进去。到目前为止,我的模板如下所示
[
{"type": "normal1", "text": "some text 1"},
{"type": "special", "text": "some text 2", "length": 2},
{"type": "normal1", "text": "some text 3"},
{"type": "header", "text": "some text 4"},
{"type": "header", "text": "some text 5"},
]
<p class="normal1">some text 1</p>
<div class="special">
<h1>some text2</h1>
<p class="normal1">some text 3</p>
<h2 class="header">some text 4</h2>
</div>
<h2 class="header">some text 5</h2>
{% for line in line_list %}
{% if line.type == "special" %}
<h1>{{ line.text }}</h1>
{% elif line.type == "header" %}
<h2 class="{{ line.type }}">{{ line.text }}</h2>
{% else %}
<p class="{{ line.type }}">{{ line.text }}</p>
{% endif %}
{% endfor %}
{行列表%中的行的%
{%if line.type==“特殊”%}
{{line.text}}
{%elif line.type==“头”%}
{{line.text}}
{%else%}
{{line.text}
{%endif%}
{%endfor%}
如果需要,我可以更改我的数据结构,以便特殊元素包含一个包含它所拥有的普通元素的列表,但是,我要么复制代码来处理不同的元素,要么做递归模板——我已经读过了,这是一个很大的禁忌。为了解决这个问题并继续下去,我最终违抗了我读过的建议,使用修改过的数据结构的递归模板。这样做时,可能会有几个性能问题。对于我的特定应用程序来说,这并不重要。我将在下面概述我最终得到了什么 新数据结构
[
{"type": "normal1", "text": "some text 1"},
{"type": "special", "text": "some text 2", "nodes": [
{"type": "normal1", "text": "some text 3"},
{"type": "header", "text": "some text 4"}
]},
{"type": "header", "text": "some text 5"}
]
基本模板
{% with template_name="sub_template" %}
{% include template_name %}
{% endwith %}
子模板
{% for line in line_list %}
{% if line.type == "special" %}
<div class="{{ line.type }}">
<h1>{{ line.text }}</h1>
{% with line_list=line.nodes %}
{% include template_name %}
{% endwith %}
</div>
{% elif line.type == "header" %}
<h2 class="{{ line.type }}">{{ line.text }}</h2>
{% else %}
<p class="{{ line.type }}">{{ line.text }}</p>
{% endif %}
{% endfor %}
{行列表%中的行的%
{%if line.type==“特殊”%}
{{line.text}}
{%with line_list=line.nodes%}
{%include template_name%}
{%endwith%}
{%elif line.type==“头”%}
{{line.text}}
{%else%}
{{line.text}
{%endif%}
{%endfor%}
很好地解释了你想要实现的目标,+1
。。你的逻辑是无法实现的。为什么不尝试从views.py传递到上下文。。。