你能制作一个返回查询集的自定义模板标签吗?如果有,怎么样? - Django

Sus*_*usa 8 django django-templates

让我的同胞SO人(?)这么容易.

这是自定义模板标记的正常工作方式 -

模板 - >

{% block content %}

     blah blah blah

     {% custom_tag_load %}

{% endblock %}
Run Code Online (Sandbox Code Playgroud)

调用custom_tag_load并返回一个字符串.我想要返回的是一个查询集,我可以像这样使用 - >

{% block content %}

     blah blah blah

     {% for x in custom_tag_load %}

          {{ x.datetime }}

     {% endfor %}

{% endblock %}
Run Code Online (Sandbox Code Playgroud)

注意 - >我基本上要做的是避免在查看中传递查询集,我不确定是否应该在我的全局上下文中存储查询集.

Dan*_*man 6

您可以从标记返回任何您喜欢的内容,包括查询集.但是,您不能在标记内使用for标记 - 您只能在那里使用变量(或通过过滤器传递的变量).你可以做的是让你的标签将查询集放入上下文中的变量,并在for循环中使用该变量.请参阅有关如何从标记设置变量的文档- 尽管请注意开发版本有一个更简单的方法来执行此操作.

但是,您不应该担心将查询集放入上下文处理器.不要忘记查询集是惰性的,因此除非在模板中计算或迭代查询集,否则不会进行数据库命中.

  • 啊,这是有道理的.为什么好的东西总是在开发版本中?FML (2认同)