问题描述
我正试图转头开始使用MVC。
{%包括“ navBar.html”%}
到目前为止,太好了。现在,我想向其发送有关“菜单”按钮的信息(到navBar.html模板)。我有一些简单的按钮,还有一些具有下拉按钮的行为。
我的按钮是对象,它们包含有关名称,href,位置等,类型(简单按钮或下拉按钮)的信息
因此,我以这种方式创建了一个嵌套列表:
outer_list = []
for a in UserModule.objects.filter(user=user_id,is_active=True):
inner_list = []
inner_list.append(UserModule(a))
for b in Submodule.objects.filter(module=a.module,is_active=True):
inner_list.append(Submodule(b))
outer_list.append(inner_list)
return {'outer_list': outer_list}
因此,每个inner_list中的第一个元素都是可能的下拉按钮的头部,或者是一个简单按钮(取决于其type属性)。
最后的列表是这样的:
- [0]简单按钮A
- [1] Button-Drop-A => [sub-button-1,sub-button-2,sub-button-3]
- [2]按钮-简单-B
以此类推。
当我将这个external_list传递给模板时,将按钮排列到菜单中所要做的就是疯狂的事情。如果我要在模板中编写很多代码,则使用MVC没有意义。
直到现在,我仍在模板上执行此操作,并且它缺少第一个元素标识,无法识别按钮类型等……
{% with isFirst=true %}
{% for inner_list in outer_list %}
{% for object in inner_list %}
{% if isFirst == true %}
<li><a href=#>Drop_parent</a></li>
{% else %}
<li><a href=#>Drop-Child</a></li>
{% endif %}
{% endfor %}
<li><a href=#>Static Button</a></li>
{% endfor %}
{% endwith %}
这还没有完成,但是我相信我走错了路。
好的建议会很感激。 谢谢
解决方法
最后,
我得到了一些可行的方法。我想知道这是否可以接受,或者还有另一种更好的方法。
在视图方面:
for a in UserModule.objects.filter(user=user_id,is_active=True):
x = Module.objects.get(id=a.module_id,is_active=True)
if x.type == 'drop-parent':
list.append(x)
for b in Submodule.objects.filter(module=a.module_id,is_active=True):
list.append(b)
list.append('drop_end')
return {'menu_list': list}
在模板站点上:
{% for object in menu_list %}
{% if object.type == 'drop-parent' %}
<li class="dropdown">
<a href="javascript:void(0)" class="dropbtn">{{object.name}}</a>
<div class="dropdown-content">
{% endif %}
{% if object.type == 'drop-child' %}
<a href=#>{{ object.name }}</a>
{% endif %}
{% if object == 'drop_end' %}
</div>
</li>
{% endif %}
{% endfor %}
另一个问题:为什么在列表中添加类标识符,而我看不到模板中的属性?我的意思是list.append(Module(x))不被视为模板内的对象模块;否则,如果我避免添加类,则可以访问属性。
谢谢,谢谢