【问题标题】:Django: custom template filterDjango:自定义模板过滤器
【发布时间】:2012-08-06 15:08:20
【问题描述】:

如何创建一个简单的过滤器来从这样的字典中提取值:

PHANTOM_TYPE_CHOICES = (
    (1, 'Type 1'),
    (2, 'Type 2'),
)

适用于 django 1.4:

我试过了:

from django.template import Library    
register = Library() 
    ...

def get(d, key):
    return d.get(key, '')

register.filter(key)

..但它不起作用! (它给了我以下错误:'function' object has no attribute 'filter')

有什么想法吗?

【问题讨论】:

  • 您的字典 (PHANTOM_TYPE_CHOICES) 不是字典,而是元组。因此没有钥匙。你想用你的过滤器做什么?
  • 我试图使用相应的索引在模板中打印 PHANTOM_TYPE_CHOICES 的任何值。因为在我的数据库中我只记住了索引而不是描述。
  • 如果您需要像访问您的选择元组这样的字典,您应该首先转换它:dict(PHANTOM_TYPE_CHOICE)。现在您应该可以通过 index.html 获取您的值了。但是,如果您只需要某些实例的值,get_FOO_choices() 可能就足够了。
  • 不错的技巧,我不知道我们可以进行这样的转换..

标签: django templates filter


【解决方案1】:

你试过了吗:

register.filter('key', get)

【讨论】:

    【解决方案2】:

    在您的代码示例中,您尝试注册一个指向方法“key”的过滤器,但是该方法的名称是“get”

    替换

    register.filter(key)
    

    register.filter(get)
    

    或者使用装饰器

    @register.filter()
    def get(d, key):
        return dict(d).get(key, '')
    

    【讨论】:

    • 这很奇怪,但它一直给我错误:...'function' object has no attribute 'filter' .seems that'filter' method it's not a valid method!!
    • 您是否尝试将方法重命名为 get() 以外的其他名称?也许这会导致一些奇怪的行为。
    • 是的,我认为可能会有 django 故障或配置错误!
    • 我添加了arie的解决方案,首先将元组转换为字典。你仍然遇到同样的错误吗?
    • 我猜你在模型中或项目路径中的其他地方有一个类,它有一个名为 Library 的类。这就是你得到它的原因。我尝试自己创建一个并且能够重新创建它。也许您正在执行 from models import * 或类似操作,然后获取对不同 Library 类的引用。
    猜你喜欢
    • 2011-05-28
    • 2011-03-29
    • 2014-02-13
    • 1970-01-01
    • 2014-02-01
    • 2013-03-26
    • 1970-01-01
    • 2017-02-10
    相关资源
    最近更新 更多