【问题标题】:How to use python on an object in a "for" function in a django template?如何在 django 模板的“for”函数中的对象上使用 python?
【发布时间】:2011-04-08 14:54:25
【问题描述】:

我希望能够根据模板中“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

但问题是我不能在模板中使用“{% for example in queryset %}”然后获取我为视图中每个特定示例制作的数据。

【问题讨论】:

  • 模板标签是一种很好且非常有效的方法。如果你想要一个复杂的标签,你可以使用一些帮助工具,比如 templatetag-sugar。另一种选择是向“示例”对象本身添加一个方法,以便可以从模板调用它
  • 是的,也许我应该采用模板标签方式 :) 这可能是唯一的解决方法..
  • 你能举一个更具体的简单例子来说明你想要达到的目标吗?

标签: python django django-templates


【解决方案1】:

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

模板语言有意仅限于演示。

不处理。

(您可以使用属性和描述符稍微修改规则,但不要这样做。它会破坏性能并使我们其他人感到困惑。请您仅在视图函数中处理。)

【讨论】:

  • 我知道我应该在视图中这样做。问题是我不知道如何在视图中一次处理一个查询集的每个部分,然后在模板中遍历它们。
  • @tmpethick:“我不知道如何在视图中一次处理一个查询集的每个部分,然后在模板中运行它们”首先,这很简单。这就是生成器函数的用途。更重要的是,如果这是您的真正问题,那么将其作为一个单独的问题提出。详细说明您关心的问题。
【解决方案2】:

如果 'example' 是您控制的类的实例,那么您可以在模板中调用任意类方法,因此如果您想做一些事情,例如使用特殊的漂亮打印方法,您可以调用该方法只需插入{{example.myfunction}}

除此之外,您不能在模板本身内编写任何 python 代码,因此您所写问题的答案是否定的。但是,您正确地声明您可以使用自定义标签实现模板语言的 python 扩展。

你对“计算数据”的使用有点吓人——你绝对不应该做任何远程重量级的事情,比如数学或模板中的 I/O。将这些计算保留在您的视图中:这种分离是设计使然。

【讨论】:

  • 我没想到我可以在模板中编写 python。问题是,即使在视图中使用“for”很容易,然后对每个实例执行一些操作,但很难在模板中使用“for”并显示您在视图中获得的不同类型的数据.不知道你是否理解 - 这有点难以解释:)
猜你喜欢
  • 1970-01-01
  • 2017-12-05
  • 2011-01-08
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 2017-11-28
  • 2021-08-01
  • 1970-01-01
相关资源
最近更新 更多