Django:在使用模板继承时在基本模板文件中加载自定义过滤器时出现问题

Posted

技术标签:

【中文标题】Django:在使用模板继承时在基本模板文件中加载自定义过滤器时出现问题【英文标题】:Django: problems while loading custom filters in the base template file while using template inheritance 【发布时间】:2012-05-12 17:23:39 【问题描述】:

在模板中执行% load custom_filters % 时,% extends "base.html" % 之后一切正常,但是当我将负载移至 base.html 模板时,过滤器会出现奇怪的行为。这是我的custom_filters.py

from django import template
from django.template.defaultfilters import stringfilter

register = template.Library()

# To cut off strings at a specified character, at first occurance. Example:
#   time = 19:30:12.123456
#    time|cut:'.' 
#   returns: 19:30:12
@register.filter
@stringfilter
def cut(string, cutoff_point):
    return string.split(cutoff_point, 1)[0]

当我在“结束模板”中加载它时,行为符合预期。如果time = 19:30:12.123456 time|cut:'.' 返回19:30:12。当我在base.html 中加载它时,返回值为19:30:12123456,与输入相同,但没有“截止点”。

有人知道为什么吗?

【问题讨论】:

好问题。节省我几个小时的时间 【参考方案1】:

您应该在每个模板中放置% load ... %,以便使用自定义标记或过滤器。

在您的情况下,调用过滤器cut 也不是一个好主意,因为此过滤器already exists(它用于从您的字符串中剪切一个点)。

【讨论】:

哦,我一定错过了。这就解释了为什么它会出现奇怪的行为。但是必须有一种方法可以在基本模板中进行加载,这就是包含/继承的想法 - 不必在 100 个地方编写相同的代码。 @olofom 是这样的Django works。但是您可以使用一个nice undocumented trick。仔细看看 Carl Meyer 的评论。 好的,有道理。那么,毕竟我应该将它加载到每个模板中。谢谢!

以上是关于Django:在使用模板继承时在基本模板文件中加载自定义过滤器时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

无法在我的 django 模板中加载图像

我无法从 JQuery ajax 调用中加载部分 Django 模板

Django:在 AJAX 请求后加载模板

如何在html文件中加载css文件已经在django中扩展了另一个html文件(base.html)

如何在 Keycloak .ftl 模板中加载用户数据?

在 .jar 中加载 freemarker 模板文件夹