【问题标题】:django list view with first and last special具有第一个和最后一个特殊的 django 列表视图
【发布时间】:2011-12-14 02:56:51
【问题描述】:

我在 django 模板中显示列表视图,我希望显示的第一个和最后一个元素使用与内部元素不同的 CSS 类。

我可以通过在 python 端取一个切片并传入list_of_things(省略第一个和最后一个元素的切片)、first_in_listlast_in_list 来做到这一点。我可以用{% list_of_elements|slice %}{% list_of_elements|first %}{% list_of_elements|last %} 在模板端做同样的事情。但两者似乎都不优雅,因为它们要求我重复 html 行 3 次(对于内部、第一个和最后一个)。

我想要的是一个模板端测试,这样我就可以{% if ... %} 只针对更改的部分。这存在吗?还是有更好的办法?

谢谢。

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

    你可以内联你的 if 语句:

    <ul>
      {% for e in list_of_elements %}
        <li class='{% if forloop.first %}first{% endif %}{% if forloop.last %}last{% endif %}'>{{ e }}</li>
      {% endfor %}
    </ul>
    

    编辑:为了可读性而换行:

    <ul>
      {% for e in list_of_elements %}
        <li class='{% if forloop.first %}first{% endif %}
                   {% if forloop.last %}last{% endif %}'>
          {{ e }}
        </li>
      {% endfor %}
    </ul>
    

    【讨论】:

    • 对!我不知道 forloop.first (等)标签。我现在在文档中看到了它们,这正是我所希望的。
    【解决方案2】:

    您也可以只使用 CSS,无需 Django 或模板代码。

    表格示例

    tr:nth-last-child(1) { ⋮ 声明 }

    列表示例

    李:第一个孩子{ ⋮ 声明 }

    等等……

    【讨论】:

    • 但我必须知道我在循环中的哪个位置才能知道要指示哪种 CSS 样式,不是吗?还是我误会了你?
    • 你误会了。这个 CSS 只是绘制任何列表的第一个或最后一个呈现的元素。如果您获取的元素比视觉上列出的更多,它也会起作用,这会破坏以前的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    相关资源
    最近更新 更多