当前位置: 首页 > 面试题库 >

Django模板:Threes中的分组项目

云承弼
2023-03-14
问题内容

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

绘画1-绘画2-绘画3

描述1
描述2
描述3

绘画4-绘画-5绘画6

说明4
说明5
说明6

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

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


问题答案:

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

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

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 %}


 类似资料:
  • 问题内容: 如何CheckboxSelectMultiple对相关模型产生的复选框进行分组? 这是最好的例子。 models.py: forms.py: views.py: 上面产生了以下输出: 我想要按功能类别(基于ForeignKey)对功能复选框进行分组: 我该如何实现?我尝试使用模板标签无济于事。 任何建议,不胜感激。 问题答案: 你必须编写自定义窗口小部件。通过使用代码段,我尝试通过将作

  • 问题内容: 我正在寻找一种使用django中的模运算符之类的方法。我想做的是在循环中的每个第四个元素中添加一个类名。 使用模数,它看起来像这样: 当然,这是行不通的,因为%是保留字符。还有其他方法吗? 问题答案: 您需要divisibleby(内置的django过滤器)。

  • 问题内容: 我正在尝试在Django模板中使用Vue.js。以下是一种这样的模板: 我将Vue的插值定界符更改为 [[]], 以避免与Django发生冲突。我的样子如下: 不幸的是,呈现的HTML包含。还有其他人遇到过类似的问题吗? 问题答案: 正如Vue v1.0的每个文档所说: 因此,在您的示例中更改为: 但是,强烈建议您使用新版本的Vue(版本2)以便保持最新!

  • 问题内容: 我有一个模型字段,它存储一个URL列表(是的,我知道,这是错误的方式)。我需要将字段拆分为模板中的数组,因此创建了自定义过滤器: 我用这种方式: 但是正如我所看到的,split并不能正常工作:我得到类似的输出(如果查看源代码,则带有换行符)。为什么? 问题答案: Django有意排除了许多类型的templatetag,以阻止你对模板进行过多处理。(不幸的是,人们通常只是自己添加这些类型

  • 是时候把数据展示出来了!Django提供了一个非常有用的内置来实现-—|-模板标签 什幺是模板标签呢? 正如你在前面章节中所了解的那样, 我们并不能将 Python 代码嵌入到HTML中。 因为浏览器不能识别 Python 代码, 它只能解析HTML。 我们知道,HTML是静态页面,而 Python 则显得更加动态。 Django模板标签允许我们将Python之类的内容翻译成HTML,所以你可以更

  • 在上一章节中我们使用 django.http.HttpResponse() 来输出 "Hello World!"。该方式将数据与视图混合在一起,不符合 Django 的 MVC 思想。 本章节我们将为大家详细介绍 Django 模板的应用,模板是一个文本,用于分离文档的表现形式和内容。 模板应用实例 我们接着上一章节的项目将在 HelloWorld 目录底下创建 templates 目录并建立 h