Django自定義過濾器和自定義標籤
阿新 • • 發佈:2019-01-10
自定義過濾器
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" %}