1.django經過模板動態的生成HTML
html
2.模板加載的位置(在setting.py中設置)python
DIRS決定模板路徑的全局變量,APP_DIRS決定是否在應用目錄中尋找模板django
3.模板引擎:Django框架經常使用Django模板引擎app
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>
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 %}
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>