当前位置: 首页 > 面试题库 >

如何在Django模板的自定义模板过滤器中添加多个参数?

祁正阳
2023-03-14
问题内容

这是我的自定义过滤器:

from django import template

register = template.Library()

@register.filter
def replace(value, cherche, remplacement):
    return value.replace(cherche, remplacement)

这是我尝试在模板文件中使用它导致错误的方式:

{{ attr.name|replace:"_"," " }}
{{ attr.name|replace:"_" " " }}
{{ attr.name|replace:"_":" " }}
{{ attr.name|replace:"cherche='_', remplacement=' '" }}

|
我查看了django的文档和书籍,但只发现了使用单个参数的示例……甚至可能吗?


问题答案:

这是可能的并且相当简单。

Django只允许在过滤器中使用一个参数,但是没有理由不能使用逗号将所有参数都放在一个字符串中。

因此,例如,如果你需要一个过滤器来检查变量X是否在列表[1,2,3,4]中,则需要一个如下所示的模板过滤器:

{% if X|is_in:"1,2,3,4" %}

现在,我们可以像这样创建你的templatetag:

from django.template import Library

register = Library()

def is_in(var, args):
    if args is None:
        return False
    arg_list = [arg.strip() for arg in args.split(',')]
    return var in arg_list

register.filter(is_in)

创建arg_list的行是一个生成器表达式,该表达式将所有逗号上的args字符串分割开并调用.strip()以删除任何前导和尾随空格。

例如,如果第三个参数是int,则只需执行以下操作:

arg_list[2] = int(arg_list[2])

或者如果它们都是整数,则执行以下操作:

arg_list = [int(arg) for arg in args.split(',')]

编辑:现在通过使用键,值对作为参数来专门回答你的问题,你可以使用Django用于解析URL之外的查询字符串的同一类,这也具有根据你的settings.py正确处理字符编码的好处。 。

因此,与查询字符串一样,每个参数都用’&’分隔:

{{ attr.name|replace:"cherche=_&remplacement= " }}

然后,你的替换函数将如下所示:

from django import template
from django.http import QueryDict

register = template.Library()

@register.filter
def replace(value, args):
    qs = QueryDict(args)
    if qs.has_key('cherche') and qs.has_key('remplacement'):
        return value.replace(qs['cherche'], qs['remplacement'])
    else:
        return value

你可能会加快速度,但有可能会进行一些错误的替换:

qs = QueryDict(args)
return value.replace(qs.get('cherche',''), qs.get('remplacement',''))


 类似资料:
  • 本文向大家介绍在Django框架中自定义模板过滤器的方法,包括了在Django框架中自定义模板过滤器的方法的使用技巧和注意事项,需要的朋友参考一下 自定义过滤器就是有一个或两个参数的Python函数:     (输入)变量的值     参数的值, 可以是默认值或者完全留空 例如,在过滤器 {{ var|foo:"bar" }} 中 ,过滤器 foo 会被传入变量 var 和默认参数 bar。 过滤

  • 虽然 Django 已经给我们提供了足够丰富的内置标签和过滤器,但实际开发中还是会遇到内置标签和过滤器无法满足的需求,此时 Django 还给我们提供了实现自定义模板标签和过滤器的方式。想要自定义模板标签和过滤器,必须按照如下的方式做好前面的准备工作。 我们在前面的第一个应用 (hello_app) 中添加自定义的标签和模板。首先完成如下两步: 必须新建一个名为 templatetags 的目录。

  • 我正在使用演示帐户的测试,我有prod帐户以及。 我想实现如下所述的一个功能:

  • 问题内容: 我需要从Django模板中执行过滤查询,以获取与视图中的python代码等效的一组对象: 在我的模板中,我想做 但我似乎无法找出如何编写FILTER。 问题答案: 你不能这样做,这是设计使然。Django框架的作者打算将表示代码与数据逻辑严格分开。过滤模型是数据逻辑,而输出HTML是表示逻辑。 因此,你有几种选择。最简单的方法是进行过滤,然后将结果传递给。或者,你可以在模型中编写一个方

  • 问题内容: Django在其模板中将其视为某些变量。我怎样才能逃避或或使得Django不把它当作变量。 应该打印完全一样。 问题答案: 我相信您正在寻找template标签。 如链接到文档所述, 由于模板系统没有“转义”的概念,因此要显示模板标签中使用的位之一,必须使用标签。 例如: 将显示为:

  • 问题内容: Django 在其模板中将其视为某些变量。我怎样才能逃避或使得Django不把它当作变量。 应该打印完全一样。 问题答案: 相信你正在寻找模板标记。 如链接到文档所述, 由于模板系统没有“转义”的概念,因此要显示模板标签中使用的位之一,必须使用标签。 例如: 将显示为: