1. 程式人生 > >Django自定義過濾器和自定義標籤

Django自定義過濾器和自定義標籤

自定義過濾器

  1、確認app已在setting中進行註冊;

  2、在app模板下建立名為templatetags的模板(切記名字一定不能改,只能是templatetags);

  3、在模板下建立任意名稱的.py檔案;

  4、在剛剛建立的.py檔案中定製過濾器

  -具體語法 

from django.template import Library
register = Library()


@register.filter(name='rule')
# 最多包含兩個引數
def rule(value, before): # 將before替換為~
return value.replace(before, '~')

  

  5、編輯檢視函式時,將value傳遞給模板檔案

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

 

  6、在模板頁面中使用自定義過濾器

<p style="color: red">
    <b>
        {% load my_tag %}
        {{ value|rule:'!' }}
    
</b> </p>

  

 

自定義標籤

  自定義標籤跟自定義過濾器的步驟一樣,只是定義的形式有點不一樣(自定義標籤,返回當前格式化時間)

# 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" %}