下面是关于@register.filter的文档:
自定义过滤器是接受一个或两个参数的Python函数:
- 变量的值(输入)-不一定是字符串。
- 参数的值-这可以有一个默认值,也可以完全忽略。
并且,文档在下面提到了@register.simple_tag:
这个函数是django.template.Library的一个方法,它接受一个可以接受任意数量参数的函数,将其 Package 在一个render函数中,并将上面提到的其他必要的位注册到模板系统中。
而且,文档只在下面提到了@register.tag
:
最后,将标记注册到模块的Library示例中,如上面编写自定义模板标记中所述。
而且,文档在下面提到了@register.inclusion_tag:
另一种常见的模板标记类型是通过呈现另一个模板来显示某些数据的类型。例如,Django的管理界面使用自定义模板标签来显示“添加/更改”表单页面底部的按钮。这些按钮看起来总是一样的,但是链接目标会根据正在编辑的对象而变化--所以它们是使用填充有当前对象细节的小模板的完美案例。
但是,我不明白它们是什么样的,那么Django模板中的@register.filter
@register.simple_tag
,@register.tag
和@register.inclusion_tag
之间有什么区别?
1条答案
按热度按时间vqlkdk9b1#
@register.filter:
takes_context
参数。as
参数。@register.simple_tag:
takes_context
参数。context
作为第一个参数,如果takes_context=True
被设置为@register.simple_tag
,否则会出现错误。* 第一个参数名称必须是context
,否则会出现错误。as
参数。@register.tag:
Node
类的对象返回str
类型值到Django模板,否则会出现错误。takes_context
参数。parser
作为第一个参数,token
作为第二个参数(其他名称也可以),否则会出错。as
参数。@register.inclusion_tag:
takes_context
参数。context
作为第一个参数,如果takes_context=True
被设置为@register.inclusion_tag
,否则有一个错误。* 第一个参数名称必须是context
,否则会出现错误。as
参数。<@register.filter>
例如,从
person_view()
向index.html
返回字典,如下所示:然后,将
name
传递到person_filter()
,如下所示:然后,将
name
从person_filter()
返回到index.html
,如下所示:然后,将显示以下内容:
接下来,将
name
和age
传递给person_filter()
,如下所示:然后,将
name
和age
从person_filter()
返回到index.html
,如下所示:然后,将显示以下内容:
<@register.simple_tag>
例如,从
person_view()
向index.html
返回字典,如下所示:然后,将
name
、age
和"Good Person"
传递给person_tag()
,如下所示:然后,将
person_tag()
中的name
、age
和extra_info
返回到index.html
,如下所示:然后,将显示以下内容:
接下来,将
takes_context=True
设置为@register.simple_tag
,然后对于person_tag()
,我们不需要name
和age
参数,然后必须将context
作为第一个参数,如下图所示。* 如果第一个参数名不是context
,则会出现错误:然后,只传递
"Good Person"
到person_tag()
,如下所示:然后,将显示以下内容:
实际上,您仍然可以将
name
和age
从index.html
传递到person_tag()
,如下所示:但是,
person_tag()
还需要2个参数,如下所示。*name
和age
参数可以使用其他名称:接下来,使用
as
参数存储从person_tag()
到person_info
的返回值,然后显示如下所示。* 不显示带有as
参数的标记:然后,将显示以下内容:
最后在
person_tag()
中,设置context['extra_info']
,然后返回一个空字符串到index.html
,如下所示:然后显示
name
、age
和extra_info
,如下所示:然后,将显示以下内容:
<@register.tag>
例如,从
person_view()
向index.html
返回字典,如下所示:然后,将
name
、age
和"Good Person"
传递给person_tag()
,如下所示:然后从
person_tag()
返回PersonNode()
,它将从render()
返回4个令牌到index.html
,如下所示。* 第一个令牌是标签名称person
,第二个令牌是name
,第三个令牌是age
,第四个令牌是"Good Person"
,@register.tag
不能有takes_context
参数和@register.tag
's函数的第一个参数必须是parser
,第二个参数必须是token
(其他名字也可以),否则会出现错误:然后,将显示以下内容:
并且,下面的代码返回第一个令牌,第二个和第三个令牌分别获得的实际
name
和age
值,以及第四个没有双引号的令牌。*template.Variable("key.dot.notation").resolve(dict)
可以从一个带有关键点符号的字典中获取值,你可以看到我的答案解释template.Variable("key.dot.notation").resolve(dict)
:然后,将显示以下内容:
下面的代码从
context
和Good Person
返回name
和age
的值:然后,将显示以下内容:
在
render()
中,设置context['extra_info']
,然后向index.html
返回一个空字符串,如下所示:然后显示
name
、age
和extra_info
,如下所示:然后,将显示以下内容:
另外,我们还可以创建一个comment标签来注解带有
parser
参数和@register.tag
的单词,如下所示:然后,用注解标记
{% comm %}
和{% endcomm %}
包围单词,以不显示单词,如下所示:<@register.inclusion_tag>
例如,从
person_view()
向index.html
返回字典,如下所示:然后,将
name
、age
和"Good Person"
传递给person_tag()
,如下所示:然后,返回一个从
person_tag()
到result.html
的字典,如下所示:然后在
result.html
中显示n
、a
和ei
,如下所示:然后,将显示以下内容:
请注意,下面的
name
、age
和extra_info
不能在result.html
中显示,因为它们没有从person_tag()
返回到result.html
:接下来,将
takes_context=True
设置为@register.inclusion_tag
,那么对于person_tag()
,我们不需要name
和age
参数,那么必须将context
(字典)作为第一个参数,然后设置context['extra_info']
,如下所示。* 如果第一个参数名不是context
,则会出现错误:然后,只传递
"Good Person"
到person_tag()
,如下所示:然后在
result.html
中显示name
、age
和extra_info
,如下所示:然后,将显示以下内容:
实际上,您仍然可以将
name
和age
从index.html
传递到person_tag()
,如下所示:但是,
person_tag()
还需要2个参数,如下所示。*name
和age
参数可以使用其他名称:最后,从
person_tag()
到result.html
返回一个空字典,如下所示:然后在
index.html
中显示name
、age
和extra_info
,如下所示:然后,将显示以下内容: