在Django temp中调用Python函数

2024-05-12 19:52:44 发布

您现在位置:Python中文网/ 问答频道 /正文

在django模板中,我试图对其中一个模板变量调用split函数,然后获取最后一个元素,所以我做了如下操作:

{{ newsletter.NewsletterPath.split('/').-1 }}

不幸的是,它不喜欢分裂。有些人可能会建议我在视图中进行拆分,但我不确定如何进行拆分,因为我需要对所有记录进行拆分。如果我能在模板里做的话就容易多了。有办法吗?


Tags: django函数视图模板元素记录建议split
3条回答

你说“它不喜欢分裂”是什么意思?它如何表现出它的厌恶?

如果我没记错的话,您不能将任何任意参数传递给方法,这些方法是从django模板调用的,并且可以在模板中使用的标识符只能由a-z、a-z、0-9、下划线和点组成(其中点表示查找:dictionary->;attribute->;method->;list index)。

至少有四种方法可以实现您的目标:

  • 通过预处理,使适当准备的数据作为模型的属性(或其他属性)可用
  • 使数据作为模型的方法可用,并确保该方法除了self之外不接受任何必需的参数
  • 在视图中填充模型实例

     for newsletter in newsletters:
          setattr(newsletter, 'basepath',
                  newsletter.NewsletterPath.split('/')[-1])
    

    (或类似的内容)

  • 实现一个自定义的过滤器标记,它将处理分割(比您想象的要简单)

django book

Note that you do not include parentheses in the method calls. Also, it’s not possible to pass arguments to the methods; you can only call methods that have no required arguments.

所以,如果你想调用一个没有模板参数的方法,那就没问题了。 否则,必须在视图中执行。

模板故意不能做这样的事情。其目的是防止将业务逻辑放在模板中,模板只用于处理布局。

因此,一种可能的方法是在新闻稿模型中定义一个新闻稿PathLastElement(self)函数,并从模板中调用它。

相关问题 更多 >