1. 程式人生 > >django中使用自定義過濾器和自定義標籤

django中使用自定義過濾器和自定義標籤

自定義過濾器

首先在app底下新建一個templatetags目錄,裡面新增兩個檔案,目錄結構如下:
目錄結構

然後在settings.py中把templatetags目錄作為app註冊

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp.apps.MyappConfig'
, 'myapp.templatetags', # 作為app註冊 ]

然後在extratags.py檔案中新增自定義的過濾器:

from django import template

register = template.Library()

@register.filter(name='cut')  # 過濾器在模板中使用時的name
def myCut(value, arg):  # 把傳遞過來的引數arg替換為'~'
    return value.replace(arg, '~')

編輯檢視函式,把value傳遞給模板檔案:

def index(request)
:
return render(request, 'one.html', {'value':'Hello, dandan!'})

在模板檔案中使用的時候,要先匯入extra_tags.py檔案:

{% load extra_tags %}

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
{# 把value中的“!”替換掉#}{{ value | cut:'!' }} </body> </html>

編輯好urls.py檔案,啟動伺服器,在瀏覽器訪問就可以看到替換後的效果了:
這裡寫圖片描述

自定義標籤

自定義標籤和上面的步驟一樣,只是定義的形式有所改變(自定義標籤,格式化返回當前時間):

# extra_tags.py
# 自定義標籤,格式化返回當前時間

@register.tag(name='current_time')
# 解析器
def do_current_time(parse, token):  # parse解析器物件,token被解析的物件,包含標籤的名字和格式化的格式
    try:
        tag_name, format_string = token.split_contents()
    except:
        raise template.TemplateSyntaxError('syntax')
    return CurrentNode(format_string[1:-1])  # 傳入模板中的節點類

import datetime
class CurrentNode(template.Node):
    def __init__(self, format):
        self.format_string = str(format)

    # 把當前時間格式化後返回
    def render(self, context):
        now = datetime.datetime.now()
        return now.strftime(self.format_string)

在模板中使用:

{% current_time "%Y-%m-%d %H:%M:%S" %}

這裡寫圖片描述