django之模板

1、模板概念  

  1.django經過模板動態的生成HTML
html

  2.模板加載的位置(在setting.py中設置)python

     DIRS決定模板路徑的全局變量,APP_DIRS決定是否在應用目錄中尋找模板django

  3.模板引擎:Django框架經常使用Django模板引擎app

2、模板變量

  1.語法:{{模板變量名}} 顯示模板變量框架

  2.點語法訪問複雜對象:函數

    字典,對象(無參方法,除了self參數),列表(Django模板引擎不支持負數索引)oop

  3.locals()函數返回一個字典,字典中包含的是當前局部變量的內容   post

from django.shortcuts import render

def go_login(request):
    return render(request,'login.html')
————————————————————————————————————————————————————————————————————————————————————————————————————————————
def login(request):
postdata = request.POST
print('接收到的請求數據類型:',type(postdata))
logname = postdata.get('logname')
logpaw = postdata.get('logpwd')
if logname == 'tom' and logpaw == '123456':
return render(request,'welcome.html',{'username':logname})
else:
return render(request,'login.html',{'msg':'用戶名或密碼輸入錯誤'})


—————————————————————————————————————————————————————————————————————————————————————————————————————————
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<h3 style="color:red">{{ msg }}</h3>
<form action="/myapp/login/" method="post">
用戶名:<input type="text" name="logname"><br>
密 碼:<input type="password" name="logpwd"><br>
<input type="submit" value="登陸">
</form>
</body>
</html>

-----------------------------------------------------------------------------------------------------------------
def pass_dict(request):
product_dict = {
'name': '雕牌洗衣粉',
'price': 12.4,
}
return render(request,'var/show_info.html',{'product':product_dict})

def pass_person(request):
per = Person('二傻',38)
return render(request,'var/show_info.html',{'person':per})

def pass_list(request):
fruits = ['蘋果','香蕉','橘子']
return render(request,'var/show_info.html',{'fruits':fruits})

def pass_all(request):
product_dict = {
'name': '旺仔牛奶',
'price': 18,
}
per = Person('二傻', 38)
fruits = ['蘋果', '香蕉', '橘子']
return render(request,'var/show_info.html',locals())


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>顯示點語法訪問模板變量</title>
</head>
<body>
<h3>商品名稱(接收字典變量):{{ product.name }}</h3>
<h3>商品價格(接收字典變量):{{ product.price }}</h3>
<h3>人的姓名(接收類變量):{{ person.name }}</h3>
<h3>人的年齡:{{ person.age }}</h3>
<h3>人的動做:{{ person.say }}</h3>
<h3>水果列表:{{ fruits.1 }}</h3>
<h3>水果列表:{{ fruits.0 }}</h3>

<h3>商品名稱(接收字典變量):{{ product_dict.name }}</h3>
<h3>商品價格(接收字典變量):{{ product_dict.price }}</h3>
<h3>人的姓名(接收類變量):{{ per.name }}</h3>
<h3>人的年齡:{{ per.age }}</h3>
<h3>人的動做:{{ per.say }}</h3>
<h3>水果列表:{{ fruits.1 }}</h3>
<h3>水果列表:{{ fruits.0 }}</h3>

</body>
</html>

 

 

 

3、模板標籤

 1.if 標籤  網站

  1.1簡單if標籤ui

 

  {% if 布爾值 %}  布爾值爲True時,顯示的內容

 

  {% else %}  布爾值爲False時,顯示的內容

 

  {% endif %} 注意:能夠在if後添加and、or、not,邏輯判斷符號。判斷是否相等,使用"=="符號。

 

2.多分支if標籤:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>if標籤</title>
</head>
<body>
    {% if score >= 90 %}
        <h3>優秀</h3>
    {% elif score >= 80 %}
        <h3>良好</h3>
    {% elif score >= 70 %}
        <h3>通常</h3>
    {% elif score >= 60 %}
        <h3>及格</h3>
    {% else %}
        <h3>留級</h3>
    {% endif %}
</body>
</html>

--------------------------------------------------------------------------------------------------------
def show_info(request,score):
try:
score = float(score)
except:
score = 0
return render(request,'tag/if_demo.html',locals())

 

 

3.for標籤 

  3.1.{% for 循環變量 in 循環序列 %}

       {{ 循環變量 }}

       {% empty %}

    若是循環序列爲空,執行此處

       {% endfor %}

       注意:使用for標籤循環時,有一個forloop模板變量,用來記錄當前循環進度的。

      3.2      forloop的經常使用屬性:counter、first、last。

  若是要進行反向循環,則在for標籤的循環序列後加上reversed。

  用法舉例:

    forloop.last 是一個布爾值;在最後一次執行循環時被置爲True。一個常見的用法是在一系列的連接之間

    放置管道符(|)

    {% for link in links %}{{ link }}

    {% if not forloop.last %} | {% endif %}

    {% endfor %}

    另外一個常見的用途是爲列表的每一個單詞的加上逗號

    {% for p in places %}

    {{ p }}

    {% if not forloop.last %}, {% endif %}

    {% endfor %}

  

def show_list(request):
    countries = ['中國','美國','俄羅斯','法國',]
    #countries = []
    navs = ['首頁','推薦','西安','抖音','娛樂',]
    return render(request, 'tag/for_demo.html', locals())

---------------------------------------------------------------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>for標籤</title>
</head>
<body>
<ul>
{% for country in countries reversed %}
<li>{{ country }}</li>
{% endfor %}
<hr>
{% for nav in navs %}
{{ nav }}
{% if not forloop.last %}
|
{% endif %}
{% endfor %}
</ul>
</body>
</html>

 

  

 3.include標籤

   include標籤經常使用來包含那些固定不變的模板

   {% include '包含的模板地址' %}

def go_include(request):
    return render(request,'tag/inlcude_demo.html')

-----------------------------------------------------------------------------------------------------

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
歡迎訪問個人網站 <br>
這是網站的主題內容 <br>
…… <br>
<br>
{% include 'tag/footer.html' %}
</body>
</html>

----------------------------------------------------------------------------------------------------------------------
footer.html文件

友情連接:
<a href="htts//www.baidu.com">百度</a>
<a href="htts//www.360.com">360</a>
<a href="htts//www.sohu.com">搜狐</a>
<a href="htts//www.sougou.com">搜狗</a>



 

 

  4.模板繼承標籤  

  父模板(基模板)提早定義若干個block塊標籤,子模板能夠繼承、重寫、添加父模板block塊中的內容。

  子模板經過{% extends '父模板位置' %}繼承父模板。

  父模板使用

  {% block 塊名稱 %}

  {% endblock %}

  進行「挖坑」,子模板「填坑」。

  子模板若是想要在父模板的某個塊中添加內容,則先要使用{{ block.super }}獲取父模板中該塊的內容。

  

def go_child(request):
    return render(request,'tag/child.html',{'info':'西安將會是國際化大農村'})

-------------------------------------------------------------------------------------------
parent.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock %}</title>
</head>
<body>
<h3>西安市委官方網站</h3>
{% block content %}

{% endblock %}

{% block slogon %}
<h3>爲人民服務</h3>
{% endblock %}

<hr>
如下是視圖函數view傳遞過來的數據:
{{ info }}

</body>
</html>

_________________________________________________________________________________________________________
child.html
{% extends 'tag/parent.html' %}

{% block title %}
西安歡迎你
{% endblock %}

{% block content %}
市委書記:王永康 <br>
市委副書記:暫無 <br>
其餘人員。。。 <br>
{% endblock %}

{% block slogon %}
{{ block.super }}
<h3>加油,加油</h3>
{{ block.super }}
{% endblock %}

 

 

4、模板過濾器

  1.做用:在變量顯示以前修改他的值

   2.使用方法:模板變量後面添加管道符|,管道符後是過濾器名稱

   3.經常使用模板過濾器:

  3.1. length 獲取模板變量對應值的長度

  3.2.first 獲取第一個元素

  3.3.upper 變爲大寫

  3.4.lower 變爲小寫

  3.5.truncatewords:"字符數" 截取指定數量的字符,該過濾器須要參數

  3.6.date 顯示日期,該過濾器須要參數,eg: date:"Y-m-d H:i:s"

  3.7.addslashes 在單引號、雙引號、反斜線前添加斜線

  3.8.add:"添加的數字" 在模板變量上添加指定的數據

def show_filter(request):
    s = 'hello django,hello world ,hello python'
    num = 100
    say = 'He said:"you are stupid!"'
    t = datetime.now()
    info = '<h3>這是傳遞的infoxinxi</h3>'
    return render(request,'filter/fileter_demo.html',locals())

-------------------------------------------------------------------------------------------------------------
filter_demo.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>演示模板過濾器</title>
</head>
<body>
<h3>傳遞的字符串的長度:{{ s|length }}</h3>
<h3>傳遞的字符串首字母大寫:{{ s|capfirst }}</h3>
<h3>連續調用過濾器使首字母大寫{{ s| first|upper}}</h3>
<h3>選取前1個單詞:{{ s| truncatewords:'5'}}</h3>
<h3>選取前1個單詞:{{ s| truncatechars:'5'}}</h3>
<h3>當前時間:{{ t|date:'Y-m-d H:i:s' }}</h3>
<h3>addslashes過濾器{{ say|addslashes }}</h3>
<h3>給變量添加5:{{ num|add:5 }}</h3>
<h3>未加safe過濾器{{ info }}</h3>
<h3>添加加safe過濾器{{ info |safe}}</h3>
</body>
</html>

 

 

  4.自定義過濾器

  自定義過濾器的步驟:

    4.1.在app目錄下創建templatetags包(包含__init__文件),並在此包下創建本身的過濾器模塊(例如:myfilter.py)

    4.2.在自定義的過濾器模塊中編寫:

    from django import template

    register = template.Library()

    並使用裝飾器@register.filter裝飾一個函數,這個函數就是過濾器的具體調用,第一個參數是傳遞過來的模板變量;若是須要對該過濾器設置參數,還須要傳遞第二個參數

    4.3.在模板中加載過濾器模塊  {% load myfilter %}

   

自定義的過濾器

from
django import template register = template.Library() #該對象能夠用來註冊模板過濾器 @register.filter(name='Chinese_upper') def number_to_upper(value,s): try: return ['','','','','','','','','',''][value] + '\t' + s except: return '參數有誤'
----------------------------------------------------------------------------------------------------

<!DOCTYPE html>
{% load myfilter %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定義過濾器</title>
</head>
<body>
{{ num|Chinese_upper:"李逼 "}}
</body>
</html>
 ----------------------------------------------------------------------------------------------------------------------
def show_custom_filter(request,num):
return render(request,'filter/custom_filter.html',locals())

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
from django import template


register = template.Library() #該對象能夠用來註冊模板過濾器


@register.filter(name='dictfilter')
def get_dict_value(value,key):
return value[key]

---------------------------------------------------------------------------------------------------------------
def show_values(request):
mydict={
'sport':'football',
'fruit':'apple',
}
return render(request,'values.html',locals())

---------------------------------------------------------------------------------------------------------------
 
<!DOCTYPE html>{% load myfilter1 %}<html lang="en"><head>    <meta charset="UTF-8">    <title>自定義模板過濾器</title></head><body>    key爲sport的值爲{{ mydict|dictfilter:'sport' }}<br>    key爲fruit的值爲{{ mydict|dictfilter:'fruit' }}<br></body></html>
相關文章
相關標籤/搜索