我有一个django应用程序,我在模板中使用以下内容:
{% load mptt_tags %}
<ul>
{% recursetree nodes %}
<li>
{{ node.name }}
{% if not node.is_leaf_node %}
<ul class="children">
{{ children }}
</ul>
{% endif %}
{% if node.is_leaf_node %}
<span ng-bind="progid = {{node.program_id}}"></span>
{% endif %}
</li>
{% endrecursetree %}
</ul>
一旦递归发生,节点的值就会消失。我想知道如何在模板中提取此循环外的值,以便它可以在另一个模板中使用?
我试过这样的事情:
<span ng-bind="progid = {{node.program_id}}"></span>
但是当我在循环之外引用它时,它不起作用!
更新:
正如您所看到的,我正在尝试在循环外使用progid的值。
答案 0 :(得分:0)
您可以尝试为此编写自定义模板标记。参见文档。
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/
假设您的作业标签名为assign
,那么您将执行
{% recursetree nodes %}
{% assign_node node %}
{% endrecursetree %}
然后使用my_node
{{ my_node.program_id }}
您的模板标记代码应该是获取上下文。主要上下文始终是context.dicts [0]。
您的模板标签模块(名为bar_tags
):
from django import template
register = template.Library()
@register.assignment_tag(takes_context=True)
def get_dummy_nodes(context, *args, **kwargs):
"""
Just get some dummy objects to work with.
"""
class Node(object):
name = None
def __init__(self, program_id):
self.program_id = program_id
nodes = []
for i in range(0, 10):
nodes.append(Node(i))
return nodes
@register.simple_tag(takes_context=True)
def assign_node(context, node, *args, **kwargs):
"""
Puts your variable into the main context under name ``my_node``.
"""
context.dicts[0]['my_node'] = node
return ''
您的模板:
<html>
<body>
{% load bar_tags %}
{% get_dummy_nodes as nodes %}
{% for node in nodes %}
{% assign_node node %}
{% endfor %}
my_node {{ my_node.program_id }}
</body>
</html>
注意:你最好在视图中做这些事情。