django中添加新的filter

给模板传递了一个字典,却发现无法在模板中直接通过key获得value. 查阅资料后,这个问题可以通过添加自定义的filter来解决.

首先在app目录下创建一个templatetags目录,并在它的下面创建一个__init__.py和dict_get_item.py文件,其中__init__py文件的作用是使templatetags成为一个模块,它直接为空即可.而dict_get_item.py里就需要定义我们的filter,具体名称可以根据自己的需要修改.

# app/templatetags/dict_get_item.py

from django import template
register = template.Library()

@register.filter(name='dict_get_item')
def get_item(dictionary, key):
    return dictionary.get(key)

之后好需要在工程的settings.py文件中添加我们的filter. 在TEMPLATES列表的OPTIONS中添加libraries,例如:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],

            'libraries': {
                'dict_get_item' : 'app.templatetags.dict_get_item',
            }
        },
    },
]

完成之后,我们就能在自己的模板文件中使用取key的方式访问dict.

{% load dict_get_item %}

{{ dict | dict_get_item:key   }}  
posted @ 2019-05-17 19:18  星星,风,阳光  阅读(619)  评论(0编辑  收藏  举报