2011-04-08 59 views
2

我希望能够基于模板中的“for”函数中的对象提取python中的一些数据。如何在django模板中的“for”函数中使用python?

在下面我的例子中想做点什么例如模板系统之外,所以我不会模板语言的限制,而是可以使用Python:

#django_template.html 

{% for example in queryset %} 
    #do something to example with python 
{% endfor %} 

我知道那可能可以用模板标签,但想知道是否没有简单的方法。这可能吗?

编辑:我能够做到这一点的看法:

for example in queryset: 
    #Extract data based on example 

但问题是我不能使用“{%例如查询集%}”中的模板,然后获取数据我在视图中为每个特定的示例进行了说明。

+0

模板标签是一个很好且非常有效的方法。如果你想要一个复杂的标签,你可以使用一些helper如templatetag-sugar。任何一个选项都是添加一个方法到'example'对象本身,所以它可以从模板中调用 – Jerzyk 2011-04-08 15:12:37

+0

是的,也许我应该去模板标签的方式:)这也许是唯一的方法.. – tmpethick 2011-04-08 19:12:08

+0

你可以给一个更具体的你想要实现什么的简单例子? – 2011-04-08 20:09:27

回答

2

这不是Django的工作方式。如果你想在模板语言的“外部”做某些事情,你可以在你的视图函数中做。

模板语言仅限于演示文稿。

没有处理。

(你可以蒙混过关的规则有点用的属性和描述,但没有。它破坏性能和混淆我们的休息。你只在您的视图功能的处理,谢谢。)

+0

我知道我应该这样做。问题是我不知道如何在视图中一次一个queryset的每个部分,然后在模板中遍历它们。 – tmpethick 2011-04-08 15:23:43

+0

@tmpethick:“我不知道如何在视图中一次一个查询集的每个部分,然后在模板中遍历它们。”首先,这是微不足道的。这就是发电机的功能。更重要的是,如果这是您的**真实**问题,那么请将其作为单独的问题提出。提供你所关心的细节。 – 2011-04-08 15:58:25

0

如果'例如'是你控制的类的一个实例,那么你可以在模板中调用任意的类方法,这样如果你想要使用特殊的漂亮打印方法,你可以通过插入{{example.myfunction}}来调用该方法。

除此之外,你不能在模板本身内写入任何python代码,所以你写的问题的答案写为no。但是,您正确地声明可以使用自定义标记对模板语言实施Python扩展。

你对'计算数据'的使用有点可怕 - 你绝对不应该做任何远程重量级的事情,比如模板中的数学或者I/O。在你的观点中保留这些计算:这种分离是按设计进行的。

+0

我没有想到我可以在模板中编写python。 问题是,即使在视图中使用“for”很容易,然后对每个实例执行一些操作,也很难在模板中使用“for”,并显示您获得的不同类型的数据视图。不知道你是否理解 - 这有点难以解释:) – tmpethick 2011-04-08 15:42:14

相关问题