我希望能够基于模板中“for”函数中的对象在python中提取一些数据。
在下面的示例中,我想在模板系统之外使用 example 做一些事情,所以我不会受模板语言的限制,但可以改为使用python:
#django_template.html
{% for example in queryset %}
#do something to example with python
{% endfor %}
我知道有可能使用模板标签,但想知道是否有更简单的方法。这可能吗?
编辑:我可以在视图中执行此操作:
for example in queryset:
#Extract data based on example
但问题是我无法在模板中使用“{%,例如在queryset%}中”,然后在视图中获取我为每个特定示例创建的数据。
答案 0 :(得分:2)
这不是Django的工作方式。如果您想在模板语言“外部”执行某些操作,请在视图函数中执行此操作。
模板语言仅限于演示文稿。
没有处理。
(你可以用属性和描述符稍微捏一下这些规则,但不要。它会破坏性能并让我们其他人感到困惑。请你只在你的视图函数中进行处理。)
答案 1 :(得分:0)
如果'example'是您控制的类的实例,那么您可以在模板中调用任意类方法,这样如果您想要使用特殊的漂亮打印方法,您可以调用该方法只需插入{{example.myfunction}}
。
除此之外,你不能在模板本身内部编写任何python代码,所以你写的问题的答案是否定的。但是,您可以正确地声明可以使用自定义标记对模板语言实现python扩展。
你使用'计算数据'有点可怕 - 你绝对不应该做任何远程重量级的事情,比如数学或模板中的I / O.将这些计算保留在您的视图中:这种分离是设计的。