当前位置:  开发笔记 > 后端 > 正文

Django模板中的备用行着色具有多个行集

如何解决《Django模板中的备用行着色具有多个行集》经验,为你挑选了2个好方法。

Django模板提供内置标记,cycle用于在模板中的不同点(或模板中的循环)之间交替切换多个值,但是当在cycles定义之外的范围内访问此标记时,此标记不会重置.也就是说,如果你在你的模板两个或多个列表,所有的行,你想它的使用一些CSS定义oddeven,列表的第一行会拿起其中最后一个离开,而不是用新的迭代来自选择(oddeven)

例如,在下面的代码中,如果第一个博客的条目数量为奇数,那么第二个博客中的第一个条目将even在我希望它开始时开始odd.

{% for blog in blogs %}
  {% for entry in blog.entries %}
    
{{entry.text}}
{% endfor %} {% endfor %}

我尝试通过修补resetcycle此处提供的标记来避免这种情况:

Django票证:周期标记应在超出范围后重置

无济于事.(该代码对我不起作用.)

我也尝试将我的内部循环移动到自定义标记中,但这也不起作用,可能是因为编译/渲染循环将循环移回外部循环?(不管为什么,它对我不起作用.)

我怎样才能完成这个简单的任务!?我不希望在我的视图中使用预先编译的信息创建数据结构; 这似乎没必要.提前致谢.



1> Carl Meyer..:

最简单的解决方法(直到重置补丁修复并应用)是使用带有forloop.counter的内置"divisibleby"过滤器:

{% for entry in blog.entries %}
  
{{ entry.text }}
{% endfor %}

更冗长,但不难理解,它很有效.


人们也可以写得更短(至少在Django 1.3中):`{{forloop.counter | divisibleby:2 | yesno:"even,odd"}}`

2> Matt..:

https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#cycle

{% for o in some_list %}
    
        ...
    
{% endfor %}

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有