【问题标题】:use nested list in django template在 Django 模板中使用嵌套列表
【发布时间】:2021-01-16 22:36:59
【问题描述】:

我有一个一维查询集,我希望它根据每个值嵌套。例如,在下面这样的模板中

<ul>
  {% for dept in dept_queryset %}
      <li>{{ dept.code }} {{ dept.name }}</li>
  {% endfor %}
</ul>

我看到这样的东西

1000 a
1100 b
1200 c
2000 q
2100 w
2110 e
2111 t
...
2200 t
2210 h
2211 b
...
2300 p

我想要的是这样的:

1000 a
    1100 b
    1200 c
2000 q
    2100 w
        2110 e
            2111 t
...
    2200 t
        2210 h
            2211 b
...
    2300 p
    

我可以对每个查询集进行硬编码并将其用作上下文,但我想知道是否有任何 Python 方式。我尝试了divisible by 过滤器,但没有成功。而且我知道我当然应该更改我的模板标签,我希望得到一些指导。任何帮助,将不胜感激。谢谢!

【问题讨论】:

  • 显示你尝试过的'I tried divisible by filter, with no success'
  • 对于初学者,我尝试过这样的事情:{% if dept.code|divisibleby: "1000" %},但没有成功。我不确定如何应用该逻辑,因为divisibleby 仅返回布尔值,并且它只能与模板变量一起使用,在我的理解中不能与标签一起使用。

标签: python django django-templates


【解决方案1】:

模板过滤器divisibleby 应该适合您。您的错误似乎是在 filter 和第二个参数之间添加了一个空格;应该没有空格。

所以这应该有效:

<ul>
  {% for dept in dept_queryset %}
      <li>
          {% if not dept.code|divisibleby:"10" %}&nbsp;{% endif %}
          {% if not dept.code|divisibleby:"100" %}&nbsp;{% endif %}
          {% if not dept.code|divisibleby:"1000" %}&nbsp;{% endif %}
          {{ dept.code }} {{ dept.name }}
      </li>
  {% endfor %}
</ul>

您评论说您想要嵌套的 HTML 列表。仅使用模板过滤器在模板中执行此操作相当棘手和复杂。在视图中使用 Python 代码更好地完成这种嵌套分组

我可以在模板中做的最接近的是一个 HTML 表格,在数据之前有不同数量的空单元格,可能是这样的:

<table>
{% for dept in dept_queryset %}
    <tr>
        {% if not dept.code|divisibleby:"10" %}<td></td>{% endif %}
        {% if not dept.code|divisibleby:"100" %}<td></td>{% endif %}
        {% if not dept.code|divisibleby:"1000" %}<td></td>{% endif %}
        <td>{{ dept.code }} {{ dept.name }}</td>
    </tr>
{% endfor %}
</table>

【讨论】:

  • 谢谢。但是,我可以使li 更具语义吗?我的意思是我想要像使用嵌套 ul 标记对 1000 以下的项目 divisibleby:"100" 或其他东西。
猜你喜欢
  • 2014-08-19
  • 1970-01-01
  • 2020-05-27
  • 2021-03-01
  • 2018-12-25
  • 1970-01-01
  • 2011-08-20
  • 2011-03-27
  • 1970-01-01
相关资源
最近更新 更多