【问题标题】:Cannot use filter inside Django template html无法在 Django 模板 html 中使用过滤器
【发布时间】:2014-05-02 12:46:37
【问题描述】:

我的 Django 项目有问题。我的情况如下:

{% for subObject in mainObject.subObjects.all %}

这很好用,每个subObject 都可以很好地迭代。我现在想要的是打印对象的一个​​子集,例如:

{% for subObject in mainObject.subobjects.filter(someField=someValue) %}

到目前为止,我已经搜索了有关我得到的错误的解决方案:

Could not parse the remainder: '(someField=someValue)'

但没有找到关于在使用过滤器时该行应该如何不同的解决方案。我只想调整 template.html 文件,因此我不想对 views.py 文件进行更改(据说一切都会很好地工作)。

如何做到这一点?

【问题讨论】:

  • 在视图中执行。这是唯一的方法。您不能在模板中使用 python。如果您希望能够做这样的事情,请查看 jinaj2 作为替代模板引擎。

标签: python django django-templates


【解决方案1】:

关注@Yuji'Tomira'Tomita 的评论..

不要在模板里放太多逻辑,引用自django docs

哲学

如果您有编程背景,或者如果您习惯 将编程代码直接混合到 HTML 中的语言,你会想要 请记住,Django 模板系统不仅仅是 Python 嵌入到 HTML 中。这是设计使然:模板系统旨在 表达演示,而不是程序逻辑。

最好在视图中定义查询集并传递给模板:

查看:

def my_view(request):
    ...
    my_objects = mainObject.subobjects.filter(someField=someValue)
    return render(request, 'mytemplate.html', {'my_objects': my_objects})

模板:

{% for subObject in my_objects %}
    ...
{% endfor %}

希望对您有所帮助。

【讨论】:

  • 感谢您的快速回复。那个请求变量的东西真是太棒了!
  • 其实这组subObjects已经在mainObjects的循环中了,一切都在狂妄自大的mainmainObject中给出,但是在model中适当的地方加上def就可以了。无论如何,感谢指出我使用代码与 html 进行逻辑。
  • @mico 当然,在模板中没有能力做某事是一个常见的问题,但这就是事情的完成方式,模板用于表示目的,用于显示数据,而不是查询和过滤..关注点分离 (MVC) 是一项伟大的发明 :)
猜你喜欢
  • 2016-07-06
  • 2019-01-01
  • 2018-07-28
  • 2017-02-10
  • 2011-09-30
  • 2020-11-08
  • 2017-01-29
  • 2015-01-31
  • 1970-01-01
相关资源
最近更新 更多