【问题标题】:How to use Django template filter in for loop?如何在 for 循环中使用 Django 模板过滤器?
【发布时间】:2020-12-19 22:21:25
【问题描述】:

如何在使用 for 循环时过滤模板中模型的特定字段。

代码:

    {% for news in news_list|position:3 %}

       <img class="d-block w-100 rounded slideimage" style="height:415px" src="{{news.image_link}}" alt="First slide">
                    <h1 class="mb-2">
                      {{news.title}}
                    </h1>
    {% endfor %}

新闻模型中有一个'位置'字段,我想得到所有位置等于3的新闻。我试过了

 {% for news in news_list|position:3 %}

有朋友可以帮忙吗?

【问题讨论】:

  • 不要在模板中过滤。过滤属于 view,因为那是业务逻辑,而不是渲染逻辑。

标签: python django django-models django-templates


【解决方案1】:

你应该在你的模板中过滤。模板应该只关心让想法看起来不错,而不是它正在呈现的东西的内容。过滤属于视图,因为视图与业务逻辑有关。

您因此过滤:

def myview(request):
    # …
    news_list = News.objects.filter(position=3)
    # …
    context = {
        'news_list' : news_list
    }
    return render(request, 'my_template.html', context)

【讨论】:

  • 谢谢你的回复,但是我有大约6个不同的职位,而且我很懒,所以我想使用相同的简单视图但不同的模板过滤器来做。但我认为有无论是在视图还是模板中过滤,工作没有太大区别,再次感谢!
  • @William:好吧,这行不通。 Django的模板标签不提供这个:docs.djangoproject.com/en/dev/ref/templates/builtins和Django的模板语言是故意限制在模板中允许.filter(position=3)等,正是为了防止人们这样做。
  • @William:如果您需要六个不同的职位,您可以使用 News.objects.filter(position__in=[1,3,6,10,15,17]) 进行过滤。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多