微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django模板:Threes中的分组项目

如何解决Django模板:Threes中的分组项目

只要您发现自己在模板中尝试复杂的代码,通常就可以很好地表明应将其移至其他位置。已经提出了一种替代解决方案,即将代码移到您的视图函数中。

另一种解决方案是通过新的模板标签公开功能。选择此解决方案而不是视图解决方案的原因之一是,您将能够轻松地将代码重新用于具有不同视图的页面

class GroupPaintingsNode(template.Node):
    def __init__(self, num, varname):
        self.num, self.varname = int(num), varname

    def render(self, context):
        paintings = Painting.objects.all # do your fetching/filtering here.. 
        l = [[] for i in range(len(paintings))]
        i = 0
        while i < len(paintings):
            l[i].append([p.title for p in paintings[i:i+self.num]])
            l[i].append([p.desc for p in paintings[i:i+self.num]])
            i += self.num
        context[self.varname] = l
        return ''

def group_paintings(parser, token):
    tokens = token.contents.split()
    if len(tokens) != 4:
        raise template.TemplateSyntaxError, "'%s' tag requires three arguments" % tokens[0]
    if tokens[2] != 'as':
        raise template.TemplateSyntaxError, "Second argument to '%s' tag must be 'as'" % tokens[0]
    return GroupPaintingsNode(tokens[1], tokens[3])
group_paintings = register.tag(group_paintings)

在模板代码中,您将像这样使用它:

{% group_paintings 3 as paintings %}
{% for p in paintings %}
    {% for title in p.0 %} {{ title }} {% endfor %}<br>
    {% for desc in p.1 %} {{ desc }} {% endfor %}
{% endfor %}

解决方法

我对Django有一个奇怪的问题。我会像平时一样在模板中循环遍历一组对象。但是,我需要将项目分为三部分。页面的布局如下所示:

绘画1-绘画2-绘画3

描述1
描述2
描述3

绘画4-绘画-5绘画6

说明4
说明5
说明6

我不能弄清楚真正做到这一点的最好的Django标签集。似乎有些棘手。{%cycle%}语句并没有太大帮助。

除非当然,否则我会进行某种形式的Java脚本黑客攻击,而将Django排除在外吗?必须有某种方式说“将所有描述div依次放置”或类似内容。不确定如何最好地使用此顺序。有什么想法吗?干杯。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。