【问题标题】:Passing parameters to template for NavBar menu in Django将参数传递给 Django 中导航栏菜单的模板
【发布时间】:2020-08-24 05:26:15
【问题描述】:

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

我有一个基本 HTML 模板,其中包含一个导航栏代码:

{% 包括 "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 中的第一个元素是可能的下拉按钮或简单按钮的头部,具体取决于其类型属性。

最后的列表是这样的:

  • [0] 按钮-简单-A
  • [1] Button-Drop-A => [sub-button-1, sub-button-2, sub-button-3]
  • [2] 按钮-简单-B

等等。

当我将这个 outer_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 %}

它根本没有完成,但我相信我走错了路。

好的建议将不胜感激。 谢谢

【问题讨论】:

    标签: django list templates navbar


    【解决方案1】:

    最后,

    我得到了一些有用的东西。我想知道这是否可以接受或有其他更好的方法。

    在视图方面:

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

    谢谢,谢谢

    【讨论】:

      猜你喜欢
      • 2010-12-26
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 2011-04-18
      • 2011-08-18
      • 1970-01-01
      相关资源
      最近更新 更多