在 django 模板中对 div 进行排序

Posted

技术标签:

【中文标题】在 django 模板中对 div 进行排序【英文标题】:Sort divs in django template 【发布时间】:2019-01-20 16:45:07 【问题描述】:

我是 Django 新手,请帮助解决我的问题。

class Article(models.Model):
articlecategory = models.ForeignKey(ArticleCategory)

文章分类可以按Big_news(连续1条新闻)或Small_news(连续3条新闻)

我想要模板中的这个逻辑:

1)按日期排序所有文章 2)如果最后 3 条新闻 = Small_news => 创建 有 3 个 div 的行 3) 如果在最后 3 条新闻中我们有 Big_news => 创建行 使用 Big_news-> 然后创建带有小新闻的行(如果 big_news 之后的所有 3 个新闻都是 small_news)

我怎样才能在 Django 中得到这个(第 3 段)?

【问题讨论】:

到目前为止你尝试了什么? 【参考方案1】:

你应该在你的视图中处理这个逻辑。它不属于您的模板。

class ArticleRowViewModel:
    def __init__(self, articles):
        self.articles = articles

    def is_big_news(self):
        return len(self.articles) == 1

articles = Article.objects.all().order_by('-date')
previous_articles = []
view_models = []
for article in articles:
    if article.big_news:
        # TODO: I don't know if this is right.
        # Your business logic didn't cover it. I'm treating it if there
        # any small news articles, that they should appear as such before
        # the current big `article` in the loop.
        if previous_articles:
            view_models.append(ArticleRowViewModel(previous_articles))
            previous_articles = []
        view_models.append(ArticleRowViewModel([article]))
    else:
        previous_articles.append(article)
        # Check if we have 3 small articles.
        if len(previous_articles) == 3:
            view_models.append(ArticleRowViewModel(previous_articles))
            previous_articles = []  
render_or_something(view_models)

【讨论】:

谢谢!现在我有列表示例: 0 - 小新闻; 1 - 大新闻 [1, 0, 0, 0, 1, 1 , 0, 0, 0]。我在模板中需要什么?我想要 1; 0 0 0 。我尝试 forloop.counter|divisibleby:3 但它对我的列表效果不佳。我怎样才能只为小新闻获取 forloop.counter?

以上是关于在 django 模板中对 div 进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Play Framework 模板中对列表进行排序?

django - 根据翻译后的名称在管理 ui 中对模型进行排序

Django数据查询中对字段进行排序

在Django中对多个表进行筛选和排序

Django数据查询中对字段进行排序

如何在 ReactJS 中对 HTML 表进行排序