在django模板中,我需要使用两个不同的信息迭代两个模型,但在for
内部进行嵌套循环for
认为这是错误的。此外,模板中的此代码不起作用。我创建了两个引用相同模板的视图。
模板里面每个模块应该是它自己的孩子。
{% if all_modules %}
{% for module in all_modules %}
<li><a class="scrollto" href="">{{ module.name }}</a>
<ul class="nav doc-sub-menu v">
{% for child in all_childs %}
<li><a class="scrollto" href="#step1">{{ child.name }}</a></li>
{% endfor%}
</ul>
</li>
{% endfor %}
{% else %}
<li><a class="scrollto" href="">None</a></li>
{% endif %}
在观点中
class BackendModulesListView(generic.ListView):
template_name = 'backend_modules.html'
model = BackendModules
context_object_name = 'all_modules'
class ChildsListView(generic.ListView):
template_name = 'backend_modules.html'
model = Child
context_object_name = 'all_childs'
queryset = Child.objects.filter(backend_modules_id=1)
在模型中
class Child(models.Model):
name = models.CharField(max_length=255)
backend_modules = models.ForeignKey(BackendModules, null=True, blank=True,
related_name='backend')
frontend_components = models.ForeignKey(FrontendComponents, null=True, blank=True,
related_name='frontend')
请帮我找到解决方案并优化代码。我知道我写错了代码:(
根据我的理解,您正在尝试迭代all_modules,并且对于all_modules中的每个实例,您都试图迭代其中的all_childs。要做到这一点,你不需要创建2个视图,因为你可以使用ForeignKey反向关系。所以你的模板应该是这样的:
{% if all_modules %}
{% for module in all_modules %}
<li><a class="scrollto" href="">{{ module.name }}</a>
<ul class="nav doc-sub-menu v">
{% for child in module.child_set.all %}
<li><a class="scrollto" href="#step1">{{ child.name }}</a></li>
{% endfor%}
</ul>
</li>
{% endfor %}
{% else %}
<li><a class="scrollto" href="">None</a></li>
{% endif %}