在django模板中我试图在其中一个模板变量上调用split函数,然后获取最后一个元素,所以我做了类似这样的事情:
{{ newsletter.NewsletterPath.split('/').-1 }}
不幸的是,它不喜欢分裂。有些人可能会建议我在视图中进行拆分,但我不知道该怎么做,因为我需要为所有记录执行此操作。如果我能在模板中做到这一点会容易得多。有没有办法做到这一点?
答案 0 :(得分:7)
来自django book:
请注意,方法调用中不包括括号。 此外,不可能将参数传递给方法; 你只能调用没有必要参数的方法。
所以,如果你想调用一个没有模板参数的方法,那很好。 否则,您必须在视图中执行此操作。
答案 1 :(得分:6)
“你不喜欢分裂”是什么意思?它是如何表现出不喜欢的?
如果我没记错的话,你不能将任何参数传递给django模板中调用的方法,并且可以在模板中使用的标识符只能包含az,AZ,0-9,下划线和点(其中点表示查找:字典 - >属性 - >方法 - >列表索引)。
至少有四种方法可以达到你想要的效果:
self
在视图中填充模型实例
for newsletter in newsletters:
setattr(newsletter, 'basepath',
newsletter.NewsletterPath.split('/')[-1])
(或沿着这些方向的东西)
答案 2 :(得分:5)
模板故意无法执行此类操作。目的是防止您将业务逻辑放在模板中,模板只用于处理布局。
因此,可行的方法是在简报模型中定义NewsletterPathLastElement(self)函数,并从模板中调用它。
答案 3 :(得分:0)
是的,正如其他人所说,你不应该真的在模板中这样做。
但是如果你愿意,那么你需要定义一个过滤器并将其加载到模板中并使用它。