10、前端tag、自定義tag、filter和simple_tag

Django提供了一些函數,經過前端能夠實現代碼邏輯、字符串的處理等功能,一些複雜的功能如數據合法性判斷、非法字符的過濾等能夠經過後臺代碼實現前端自定義函數。css

django提供了兩種方法爲前端實現自定義函數,分別是filter和simple_tag.
html

1、前端tag前端

後臺代碼django

def test(request):
'''定義一些變量給前端使用''' import datetime cur_time
= datetime.datetime.now() age = 18 name = 'marry' article_content = 'django有自帶的分頁,很是的好用,代碼以下:django有自帶的分頁,很是的好用,代碼以下:django有自帶的分頁,很是的好用,代碼以下:' navs = ["個人日記a","個人相冊",'個人心情','個人心情1','個人心情2','個人心情3'] comments = '<h1 style="font-size:200px">你好呀</h1>' h1_str = '<p style="font-size:98px">哼哼哼離嘛哼</p>' js_str="<script>alert('哈哈哈哈')</script>" article_content2 = "敏感詞哼哼哼哼這是一個敏感詞。。。" say = "今每天黑得很早,沒有星星也沒有月亮,而後天空被展開成了二維空間。" return render(request,'test.html',locals()) #locals()返回全部的變量,就不用使用字典一個一個的加了

前端代碼後端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body> {{ age|add:"1" }} {# add加,int類型作加法 #}
<br> {{ name|add:" 先生"|upper }} {# 字符串在後面加一個字符串 #}
<br> {{ comments }} <br>
----長度{{ navs|length }} <br>
----{{ navs.0 }} <br> {{ article_content|truncatechars:"20" }} {#截斷字符串的,多餘的字符串用...顯示#}
<br> {{ navs|slice:"0:3" }}{# slice切片,兩個參數 #}
{#切片#}<br>
{#切片#}<br>
{#切片#}<br>
 {{ navs|join:"" }}{# 以","鏈接這個list#}
<br> {{ author |default:"管理員" }} {# default默認值 #}
<br> {{ cur_time|date:'Y/m/d H:i:s' }} {# 時間格式化 #}
<br>

<br> {{ name|upper }} {# 大寫 #}
{{ name|lower }} {# 小寫 #}
<br> {{ h1_str |safe}} {# safe被認爲安全的代碼,會根據標籤進行解析,若是不加safe則按字符串輸出,不會被解析#}
 {{ js_str|safe }} {#若是後面加了safe的話,認爲這個是安全的字符串,瀏覽器會按照標籤解析#}
{#若是不加safe的話,就是一個普通的字符串,就不會按照標籤解析#}

</body>
</html>
一、前端使用變量
{{ age }} {#後端的變量使用兩個大括號括起來,可直接使用#}
二、truncatechars截斷字符串
{{ article_content|truncatechars:"20" }} {#truncatechars 截斷字符串,只顯示20個,多餘的字符串用...顯示#}
三、slice切片
{{ navs|slice:"0:3" }}{# slice切片,兩個參數 #}
四、upper大寫、lower小寫
{{ name|upper }} {# 大寫 #}
{{ name|lower }} {# 小寫 #}
五、join鏈接字符串
{{ navs|join:"====" }} {# 以","鏈接這個list#}
六、default默認值
{{ author |default:"管理員" }} {# default默認值 #}
七、時間格式化
{{ cur_time|date:'Y/m/d H:i:s' }} {# 時間格式化 #}
八、css注入、js注入
{{ h1_str |safe}}
{{ js_str|safe }}
{#若是後面加了safe的話,認爲這個是安全的字符串,瀏覽器會按照標籤解析#}
{#若是不加safe的話,就是一個普通的字符串,就不會按照標籤解析#}
若是瀏覽器把全部標籤都解析,那麼很容易經過評論、提交等能夠寫入字符的地方進行css、js注入。
九、add加
{{ age|add:"1" }} {# add加,int類型作加法 #}
{{ name|add:" 先生"|upper }} {# 字符串類型,把兩個字符串拼在一塊兒 #}
PS:支持鏈式操做,使用多個管道符|
十、length取長度
{{ navs|length }}{# 取長度 #}
十一、取下標元素
{{navs.0}} {# 取第0個元素 #}
2、自定義tag 
前端實現自定義函數有兩種方式,filter和simple_tag
準備工做:
  一、在應用目錄下建立templatetags目錄,必需是pathon package模式的文件目錄
  二、在templatetags目錄下建立py文件,並導入template模塊
一、filter
自定義filter最多兩個參數
  • 替換敏感詞--替換字符串後臺寫死
from django import template #導入template模塊 register = template.Library() #這個變量必須叫register

# 加上這個就是裝飾器
@register.filter def mingan(value:str): if '敏感詞' in value: value = value.replace("敏感詞","**") return value #前端使用 {{ article_content2|mingan }}  {# mingan是後臺自定義的過濾函數 #} 
 
  • 替換敏感詞--前端傳入替換字符串
 
@register.filter def mingan2(value,s):#函數傳入替換字符串s
    if '敏感詞' in value: value = value.replace("敏感詞",s) return value #前端代碼
{{ article_content2|mingan2:"+++" }} {# 傳入替換的字符 #}  
 

 二、simple_tag瀏覽器

simple_tag可實現多個參數
#不限制參數個數,傳入一個list
@register.simple_tag def mingan3(value,*args): for s in args: if s in value: value = value.replace(s,'**') return value #前端調用代碼
{% mingan3 say "天黑" "星星" "月亮" "二維"%} {#調用simple_tag格式#}                      
相關文章
相關標籤/搜索