将参数传递给Django中NavBar菜单的模板

问题描述

我正试图转头开始使用MVC。

我有一个基本HTML模板,其中包含一个NavBar代码

{%包括“ 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))不被视为模板内的对象模块;否则,如果我避免添加类,则可以访问属性。

谢谢,谢谢