溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

六、模板語(yǔ)言:變量,過濾器,標(biāo)簽等

發(fā)布時(shí)間:2020-07-07 09:41:06 來源:網(wǎng)絡(luò) 閱讀:281 作者:a120518129 欄目:編程語(yǔ)言

模板語(yǔ)法之變量、模版之過濾器、模版之標(biāo)簽、自定義標(biāo)簽和過濾器

# 相當(dāng)于print了該變量

urls.py

url(r'^index/', views.index),

views.py

from django.shortcuts import render

# Create your views here.
def index(request):
    name='s_jun'
    age=20
    li=[1,2,'s_jun','zone']
    l2=[]
    t1=(1,2,3,'a','b','3')
    s2={'h','t','d','q','b','v',9,6,4,3,}
    dic={'name':'s_jun','age':20,'str2':[9,'a',6,'x',3]}
    def test():
        print('test')
        return 'return test '
    print(test())
    # 類和對(duì)像
    class Person():
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def get_name(self):
            return self.name
        @classmethod
        def cls_test(cls):
            return 'cls'
        @staticmethod
        def static_test():
            return 'static'
        # 模板里不支持帶參數(shù)
        # def get_name_cs(self,ttt):
        #     return self.name

    s_jun=Person('s_jun',20)
    zone=Person('zone',20)
    person_list=[s_jun,zone]
    person_dic={'s_jun':s_jun}
    # 函數(shù)不能打印內(nèi)存地址,但可以把它放入到列表中,再打印內(nèi)存地址(了解即可,(只打印內(nèi)存地址))
    # locals 會(huì)把函數(shù)當(dāng)中的變量傳遞給'index.html'的這個(gè)網(wǎng)頁(yè)中去。
    file_size=1024
    import datetime
    ctim=datetime.datetime.now()
    h3='<h3>我倒</h3>'
    script='<script>alert(1111111111)</script>'
    #  # return render( request,'index.html',{'name':name})
    user='s_jun'
    return render(request,'index.html',locals())

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板語(yǔ)言之變量</title>
</head>
<body>
<p>名字:{{ name }}</p>
<p>年齡(數(shù)字類型):{{ age }}</p>
<p>列表:{{ li }}</p>
<p>元祖:{{ t1 }}</p>
<p>集合:{{ s2 }}</p>
<p>字典:{{ dic }}</p>
<p>函數(shù):{{ test }}</p>
<p>對(duì)像:{{ s_jun }}</p>
<p>列表里套對(duì)象:{{ person_list }}</p>
<p>字典里套對(duì)象:{{ person_dic }}</p>
<hr>
<h4>深度查詢</h4>
<p>列表的第0個(gè)值:{{ li.0 }}</p>
<p>列表的第3個(gè)值:{{ li.3 }}</p>
<p>字典取值:{{ dic.name }}</p>
<p>字典取列表值:{{ dic.str2.2 }}</p>
<p>對(duì)象取數(shù)據(jù)屬性:{{ s_jun.name }}</p>
<p>對(duì)象取綁定給對(duì)象的函數(shù)屬性:{{ s_jun.get_name }}</p>
<p>對(duì)象取綁定給類的函數(shù)屬性:{{ s_jun.cls_test }}</p>
<p>對(duì)象取靜態(tài)方法:{{ s_jun.static_test }}</p>
<p>把對(duì)象列表中s_jun年齡取出來:{{ person_list.1.age }}</p>
{#不能調(diào)有參數(shù)的方法#}
<p>字符串的方法:{{ name.upper }}</p>
<h4>模板語(yǔ)言之過濾器</h4>
{#后面就是個(gè)python中的函數(shù),|前面的,是函數(shù)的第一個(gè)參數(shù),冒號(hào)后面的是第二個(gè)參數(shù)#}
<p>統(tǒng)計(jì)字符串長(zhǎng)度:{{ name|length }}</p>
<p>統(tǒng)計(jì)列表長(zhǎng)度:{{ li | length }}</p>
<p>過濾器之默認(rèn)值:{{ l2| default:'空值' }}</p>
<p>過濾器之filesizeformat--1: {{443|filesizeformat }}</p>
<p>過濾器之filesizeformat--2: {{ file_size|filesizeformat }}</p>
<p>過濾器之不使用date:{{ ctim }}</p>
<p>過濾器之date:{{ ctim|date:'Y-m-d' }}</p>
{#前閉后開區(qū)間#}
<p>過濾器之slice:{{ li|slice:'2:-1' }}</p>
{#支持步長(zhǎng)#}
{#<p>過濾器之slice-字符串:{{ name | slice: '0:3:3'}}</p>#}
{#三個(gè)起步(顯示10個(gè),加上3個(gè)...是13個(gè))#}
<p>過濾器之truncatechars:{{ 'sdfaasdfdfsfpyyy'| truncatechars:13}}</p>
{#根據(jù)空格來 顯示的字段#}
<p>過濾器之truncatewords:{{ '奪 jhk jh 我 kjhkl lkj 恥 囲 在 dslafj'| truncatewords:5 }}</p>
<p>過濾器之不用safe:{{ h3 }}</p>
<p>過濾器之用safe:{{ h3|safe }}</p>
<p>過濾器之不用safe:{{ script }}</p>
{#<p>過濾器之用safe:{{ script|safe }}</p>#}
<p>過濾器之用add:{{ 12|add:'1' }}</p>
<p>過濾器之用add:{{ 'egon'| add:'xxx' }}</p>
<hr>
<h4>模板語(yǔ)言之標(biāo)簽</h4>
{% for bar in li %}
{{ forloop }}
    <p>{{ forloop.first }} --->{{ forloop.counter0 }} --->{{ forloop.revcounter }}--->{{ bar }} </p>
{% endfor %}
<hr>
{%  for bar in li %}
    {% for i in person_list %}
{#  取出外層是第幾次循環(huán)#}
 {{ forloop.parentloop.counter }}
<p> {{ forloop.first }}--->{{ forloop.counter0 }}---> {{ forloop.revcounter }}----> {{ bar }} </p>
{% endfor %}
{% endfor %}
<hr>
{# *************循環(huán)的對(duì)象是空,才會(huì)走到empty,而不是對(duì)象里面的東西為空 #}
{% for bar in dic %}
<p>{{ bar }}</p>
{% empty %}
{% endfor %}
<hr>
{#只循環(huán)字典的話,取到的是key值#}
{% for bar in dic %}
<p> {{ bar }} </p>
{% endfor %}
<hr>
{#取到value的值#}
{% for bar in dic.values %}
    <p>{{ bar }}</p>
    {% empty %}
{% endfor %}
<hr>
{#取到key 和 value的值#}
{% for k,v in dic.items %}
<p>{{ k }}-----> {{ v }}</p>
{% empty %}
{% endfor %}
<hr>
{% if user %}
    <a href="">退出</a>
    {% else %}
    <a href="">登錄</a>
    <a href="">注冊(cè)</a>
{% endif %}
<hr>
{#for循環(huán)判斷如果是第一次,打印第一次,其他打印正常值#}
{% for bar in li %}
    {% if forloop.first %}
        <p>第一次的我</p>
    {% elif forloop.last %}
        <p>最后的我</p>
    {% else %}
        <p>{{ bar }}</p>
    {% endif %}
{% endfor %}
<hr>
{#with 相當(dāng)于取別名,作用:變量太長(zhǎng),可以簡(jiǎn)化#}
{% with name as ttt %}
    {{ ttt }}
    {{ name }}
    {{ user }}
{% endwith %}
<hr>
{% with dic.li.2 as ttt %}
    {{ ttt }}
    {{ ttt }}
    {% endwith %}
<hr>
{#************for ,if,with 都要有結(jié)束*************#}
<h4>自定義標(biāo)簽過濾器</h4>
{% load mytag %}
{#傳多個(gè)參數(shù)的話:可以:'aaa:bb:cc',也可以:傳列表#}
<p>{{ 's_jun'| yyy:'nb' }}</p>
<h6>使用自定義的標(biāo)簽</h6>
<p>{% add_nb 's_jun' %}</p>
<p>{% add_3 's_jun' 'is' 'zone' %}</p>
<hr>
{#過濾器,可以用在if判斷中#}
{% if 's_jun'|yyy:'test' %}
<p></p>
{% endif %}
{#標(biāo)簽不能用在if判斷(報(bào)錯(cuò))#}
{#{% if add_nb 's_jun' %}#}
{##}
{#{% endif %}#}
</body>
</html>

# 自定義標(biāo)簽過濾器 (最好重啟一下django項(xiàng)目

app01目錄下,目錄名"templatetags"必須叫這個(gè)名字

app01/templatetags/mytag.py

# 第一步,導(dǎo)入template
from django.template import Library
# 第二步,定義一個(gè)叫register的變量=template.Library()
register=Library()
# 第三步
@register.filter(name='yyy')
def str_add(str1,str2):
    # 業(yè)務(wù)邏輯很復(fù)雜
    return str1 + str2
@register.simple_tag()
def add_nb(value):
    return value+'nb'
@register.simple_tag()
def add_3(value,value2,value3):
    return value+value2+value3

總結(jié):

上節(jié)回顧:(模板層)
	1 模板之變量---{{ }}
		-支持?jǐn)?shù)字,字符串,布爾類型,列表,字典---相當(dāng)于對(duì)它進(jìn)行了打印
		-函數(shù)--->相當(dāng)于加括號(hào)運(yùn)行(不能傳參數(shù))
		-對(duì)象--->內(nèi)存地址,(如果重寫__str__方法,打印的就是返回的內(nèi)容)
	2 過濾器
		-length---計(jì)算長(zhǎng)度
		-default----設(shè)默認(rèn)值
		-filesizeformat---把數(shù)字轉(zhuǎn)成文件大小格式
		-截?cái)嘧址?--最少是三
		-截?cái)鄦卧~
		-data----格式化日期類型
		-add-----數(shù)字,字符串相加
		-slice----切片,首,尾,步長(zhǎng) '1:-1:2'
		-safe-----把前端代碼渲染到頁(yè)面,而不是直接顯示
	3 標(biāo)簽
		-for  --用法跟python一樣
		-if   --用法跟python一樣
		-with --相當(dāng)于取別名
	4 自定義標(biāo)簽
		-1 在app下創(chuàng)建一個(gè)模塊,名字必須叫templatetags
		-2 創(chuàng)建任意一個(gè)py文件,my_tags.py
		-3 導(dǎo)入:from django.template import Library
		-4 注冊(cè):register=Library()
		-5 寫一個(gè)函數(shù),用register.simple_tag(name=可以寫一個(gè)別名),裝飾一下
		-6 使用(重啟)
		-7 在模板里:{%load my_tags%}
		-8 {% 函數(shù)名字或者別名 %},傳參,用空格分割
	5 自定義過濾器
		-1 在app下創(chuàng)建一個(gè)模塊,名字必須叫templatetags
		-2 創(chuàng)建任意一個(gè)py文件,my_tags.py
		-3 導(dǎo)入:from django.template import Library
		-4 注冊(cè):register=Library()
		-5 寫一個(gè)函數(shù),用register.filter(name=可以寫一個(gè)別名),裝飾一下
		-6 使用(重啟)
		-7 在模板里:{%load my_tags%}
		-8 {{ 函數(shù)名字或者別名 }},傳參,最多傳兩個(gè)參數(shù){{'參數(shù)一'|過濾器名字:'參數(shù)二'}}
	6 過濾器可以用在if判斷中,標(biāo)簽不能



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI