快速了解Django模板的使用

創(chuàng)建一個項目bcxt_tmpl
創(chuàng)建一個應用learn
配置url
?
i.在應用下創(chuàng)建一個urls.py模塊
?
i.把我們應用創(chuàng)建的urls.py引入到項目里(做好關聯(lián))
url(r'^learn/', include(learn.urls))
視圖
?
i.首先應該先創(chuàng)建HTML頁面
默認配置下,Django 的模板系統(tǒng)會自動找到app下面的templates文件夾中的模板文件罐呼。
?
i.創(chuàng)建視圖
def home(request):
return render(request, 'home.html')
?
i.配置url
from django.conf.urls import urlfrom learn import views

urlpatterns = [
url(r'^home/$', views.home)
]
?
i.跑起django項目
python manage.py runserver
?
i.在瀏覽器輸入
http://127.0.0.1:8000/learn/home/
?注意:render 是返回模板渲染
模板
顯示一個基本的字符串在網(wǎng)頁上
步驟1(思路:在視圖里面定義):
from django.shortcuts import render

Create your views here.def home(request):

string = '歡迎來到北財學堂'
return render(request, 'home.html', {'string': string})

from django.shortcuts import render

Create your views here.def home(request):

string = '歡迎來到北財學堂'
context = {'string': string}
return render(request, 'home.html', context)

步驟2:在HTML里面渲染 {{ }}
?在home.html里面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>home</title>
</head>
<body>
<h1>{{ string }}</h1>
</body>
</html>
基本的 for 循環(huán) 和 List內(nèi)容的顯示
簡單總結一下:一般的變量之類的用 {{ }}(變量)港谊,功能類的,比如循環(huán)释液,條件判斷是用 {% %}(標簽)
?
i.在視圖函數(shù)里面定義一個列表給模板傳過去
from django.shortcuts import render

Create your views here.def home(request):

alist = ['python全棧+人工智能', '大數(shù)據(jù)技術', 'HTML5', 'UI設計']
context = {'a': alist}
return render(request, 'home.html', context)

?
i.在模板里面操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>home</title>
</head>
<body>
{% for xxxxx in a %}
<h1>{{ xxxxx }}</h1>



{% endfor %}

</body>
</html>
顯示字典中內(nèi)容
?步驟1 在views.py里面配置內(nèi)容
from django.shortcuts import render

Create your views here.def home(request):

adict = {'one': '蒙多', 'two': '豬妹'}
context = {'a': adict}
return render(request, 'home.html', context)

?步驟2:在模板里面獲取內(nèi)容并展示
?調用字典的值可以用 鍵名(context)+鍵名(adict的鍵)
<!DOCTYPE html><html lang="en"><head>
<meta charset="UTF-8">
<title>home</title></head><body><h1>one:{{ a.one }}</h1><h2>two:{{ a.two }}</h2></body></html>
在模板進行 條件判斷和 for 循環(huán)的詳細操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>home</title>
</head>
<body>
{% for item in List %}
{{ item }}{% if not forloop.last %},{% endif %}
{% endfor %}
</body>
</html>
from django.shortcuts import render

Create your views here.def home(request):

List = map(str, range(100))  # 一個長度為100的 List
return render(request, 'home.html', {'List': List})

網(wǎng)頁跳轉
?urls.py
from django.conf.urls import urlfrom learn import views

urlpatterns = [
url(r'^home/$', views.home),
url(r'^detail/$', views.detail, name='deat')
]
?views.py
def detail(request):
return render(request, 'detail.html')
最關鍵的一步侄泽,我們?nèi)绾卧诰W(wǎng)頁中進行跳轉,利用模板語法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>home</title>
</head>
<body>

<a href="{% url 'deat' %}">跳轉</a>
</body>
</html>
調用對象的方法
步驟:

  1. 新建一個項目test4、應用booktest
  2. 新建應用urls、然后配置項目urls
    from django.conf.urls import include, urlfrom django.contrib import adminfrom booktest import urls as booktest_urls

urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('booktest.urls', namespace='booktest'))
]

  1. 定義模型類
    from django.db import models

Create your models here.class BookInfo(models.Model):

btitle = models.CharField(max_length=20)
# db_column更改在數(shù)據(jù)庫里面顯示的字段名
bpub_date = models.DateTimeField(db_column='pub_date')
bread = models.IntegerField()
bcommet = models.IntegerField()
isDelete = models.BooleanField()

class Meta():
    db_table = 'bookinfo'

class HeroInfo(models.Model):
hname = models.CharField(max_length=20)
hgender = models.BooleanField()
hcontent = models.CharField(max_length=10000)
isDelete = models.BooleanField()
# 'BookInfo' 的引號問題钞它,如果不加引號也行,前提是之前有定義BookInfo這個類,如果沒定義也想外鍵 就必須加引號
book = models.ForeignKey('BookInfo')

  1. 編寫一個index視圖
    from django.shortcuts import renderfrom booktest.models import *

Create your views here.def index(request):

hero = HeroInfo.objects.get(pk=1)
context = {'hero': hero}
return render(request, 'index.html', context)
  1. 配置應用urls.py
    from django.conf.urls import urlfrom booktest import views

urlpatterns = [
url(r'^$', views.index,name='index')
]

  1. index.html配置
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    {{ hero.hname }}
    </body>
    </html>
    注意: 以上遭垛,我們在HTML里面是通過對象.屬性進行調用
    7.另外一種方式調用對象
    1.在models.py中我們增加一個方法showname
    from django.db import models

Create your models here.class BookInfo(models.Model):

btitle = models.CharField(max_length=20)
# db_column更改在數(shù)據(jù)庫里面顯示的字段名
bpub_date = models.DateTimeField(db_column='pub_date')
bread = models.IntegerField()
bcommet = models.IntegerField()
isDelete = models.BooleanField()

class Meta():
    db_table = 'bookinfo'

class HeroInfo(models.Model):
hname = models.CharField(max_length=20)
hgender = models.BooleanField()
hcontent = models.CharField(max_length=10000)
isDelete = models.BooleanField()
# 'BookInfo' 的引號問題尼桶,如果不加引號也行,前提是之前有定義BookInfo這個類锯仪,如果沒定義也想外鍵 就必須加引號
book = models.ForeignKey('BookInfo')

def showname(self):
    return self.hname

1.在html里面我們可以調用{{hero.showname}}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ hero.showname }}
</body>
</html>
8.定義模板
1.在view.py中
from django.shortcuts import renderfrom booktest.models import *

Create your views here.def index(request):

# hero = HeroInfo.objects.get(pk=1)
# context = {'hero': hero}
list = HeroInfo.objects.all()
context = {'list': list}
return render(request, 'index.html', context)

1.在html中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ hero.showname }}



{% for hero in list %}
<li>{{ forloop.counter }}:{{ hero.showname }}</li>
{% empty %}
啥也沒有找到
{% endfor %}
</body>
</html>
其中:
{% for hero in list %}
如果有數(shù)據(jù)走這個分支
{% empty %}
如果沒數(shù)據(jù)走這個分支
{% endfor %}
{{ forloop.counter }} # 表示循環(huán)的第幾次
反向解析
步驟

  1. 創(chuàng)建一個show.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <h1>{{ id }}</h1>
    </body>
    </html>
  2. 定義一個視圖show
    from django.shortcuts import renderfrom booktest.models import *

Create your views here.def index(request):

# hero = HeroInfo.objects.get(pk=1)
# context = {'hero': hero}
list = HeroInfo.objects.all()
context = {'list': list}
return render(request, 'index.html', context)

def show(request, id):
context = {'id': id}
return render(request, 'show.html', context)

  1. 配置url
    from django.conf.urls import urlfrom booktest import views

urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'(\d+)', views.show, name='show')
]

  1. 在index.html中
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <a href="123">展示連接1</a>
    {{ hero.showname }}


    {% for hero in list %}
    <li>{{ forloop.counter }}:{{ hero.showname }}</li>
    {% empty %}
    啥也沒有找到
    {% endfor %}
    </body>
    </html>
  2. 將項目跑起來挣郭,在index頁面中點擊鏈接
  3. 在index中
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <a href="{% url 'booktest:show' %}">展示連接1</a>
    {{ hero.showname }}


    {% for hero in list %}
    <li>{{ forloop.counter }}:{{ hero.showname }}</li>
    {% empty %}
    啥也沒有找到
    {% endfor %}
    </body>
    </html>
  4. 可以帶參數(shù)
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <a href="{% url 'booktest:show' 456 %}">展示連接1</a>
    {{ hero.showname }}


    {% for hero in list %}
    <li>{{ forloop.counter }}:{{ hero.showname }}</li>
    {% empty %}
    啥也沒有找到
    {% endfor %}
    </body>
    </html>
    模板繼承
    步驟一(模板繼承)
  5. 創(chuàng)建一個base.html 和 index_2.html
  6. 在base.html中
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    {% block head %}{% endblock %}
    </head>
    <body>
    <h1>logo</h1>


    {% block content1 %}
    {% endblock %}


    <h1>contact</h1>

</body>
</html>

  1. 在index_2中,先刪除所有HTML內(nèi)容鼓拧,剩下一個空白的HTML文檔
    繼承語法: {% extends 'base.html' %}
    {% extends 'base.html' %}
  2. 寫一個臨時用于練習的模板繼承的視圖
    def index2(request):
    return render(request, 'index_2.html')
  3. 配置urls
    from django.conf.urls import urlfrom booktest import views

urlpatterns = [
url(r'^$', views.index, name='index'),
# url(r'(\d+)', views.show, name='show'),
url(r'^index2/$', views.index2, name='index2'),
]

  1. 跑起django項目
    python manage.py runserver

7.在index_2.html中
{% extends 'base.html' %}

{% block content1%}
<h1>新填充的內(nèi)容</h1>
{% endblock %}

三層繼承結構

  1. 舉個栗子(如圖)

  2. 因為之前已經(jīng)創(chuàng)建了base.html,我們現(xiàn)在只需要創(chuàng)建base_user.html和base_goods.html

  3. 因為base_user.html繼承自base.html,所以在base_user中
    {% extends 'base.html' %}

  4. 同理,在base_goods.html中
    {% extends 'base.html' %}

  5. 在base_user.html中
    {% extends 'base.html' %}

{% block content1 %}
<table border="1">
<tr>
<td height="300">用戶導航</td>
<td>{% block user_content %}{% endblock %}</td>
</tr>
</table>
{% endblock %}
6.添加新的user模板叠赦,譬如創(chuàng)建user1.html和user2.html,均繼承自base_user.html
{% extends 'base_user.html' %}

  1. 在user1.html中
    {% extends 'base_user.html' %}
    {% block user_content %}
    <h2>用戶中心1</h2>
    {% endblock user_content%}
  2. 在user2.html中
    {% extends 'base_user.html' %}
    {% block user_content %}
    <h2>用戶中心2</h2>
    {% endblock user_content%}
    9.編寫user1和user2的視圖
    def index2(request):
    return render(request, 'index_2.html')

def user1(request):
return render(request, 'user1.html')

def user2(request):
return render(request, 'user2.html')

  1. 配置url
    from django.conf.urls import urlfrom booktest import views

urlpatterns = [
url(r'^$', views.index, name='index'),
# url(r'(\d+)', views.show, name='show'),
url(r'^index2/$', views.index2, name='index2'),
url(r'^user1/$', views.user1, name='user1'),
url(r'^user2/$', views.user2, name='user2')
]

HTML轉義
步驟

  1. 創(chuàng)建一個htmlTest.html和配置視圖
    def htmlTest(request):
    context = {'t1': '<h1>123</h1>'}
    return render(request, 'htmlTest.html', context)
  2. 在htmlTest.html中
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    {{ t1 }}
    </body>
    </html>
  3. 配置url
    from django.conf.urls import urlfrom booktest import views

urlpatterns = [
url(r'^$', views.index, name='index'),
# url(r'(\d+)', views.show, name='show'),
url(r'^index2/$', views.index2, name='index2'),
url(r'^user1/$', views.user1, name='user1'),
url(r'^user2/$', views.user2, name='user2'),
url(r'^htmlTest/$', views.htmlTest)
]

  1. 不行轉義(默認是轉義) safe
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    {{ t1|safe }}
    </body>
    </html>
  2. 關閉轉義的另外一種方案
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    {{ t1|safe }}


    {% autoescape off%}
    {{ t1 }}
    {% endautoescape %}
    </body>
    </html>
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末材泄,一起剝皮案震驚了整個濱河市西疤,隨后出現(xiàn)的幾起案子币绩,更是在濱河造成了極大的恐慌,老刑警劉巖瘸羡,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漩仙,死亡現(xiàn)場離奇詭異,居然都是意外死亡犹赖,警方通過查閱死者的電腦和手機队他,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來峻村,“玉大人麸折,你說我怎么就攤上這事≌匙颍” “怎么了垢啼?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長张肾。 經(jīng)常有香客問我芭析,道長,這世上最難降的妖魔是什么吞瞪? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任馁启,我火速辦了婚禮,結果婚禮上芍秆,老公的妹妹穿的比我還像新娘惯疙。我一直安慰自己,他們只是感情好妖啥,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布霉颠。 她就那樣靜靜地躺著,像睡著了一般荆虱。 火紅的嫁衣襯著肌膚如雪掉分。 梳的紋絲不亂的頭發(fā)上俭缓,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音酥郭,去河邊找鬼。 笑死愿吹,一個胖子當著我的面吹牛不从,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播犁跪,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼椿息,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了坷衍?” 一聲冷哼從身側響起寝优,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枫耳,沒想到半個月后乏矾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡迁杨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年钻心,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铅协。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡捷沸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狐史,到底是詐尸還是另有隱情痒给,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布骏全,位于F島的核電站苍柏,受9級特大地震影響,放射性物質發(fā)生泄漏吟温。R本人自食惡果不足惜序仙,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲁豪。 院中可真熱鬧潘悼,春花似錦、人聲如沸爬橡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糙申。三九已至宾添,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缕陕。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工粱锐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扛邑。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓怜浅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔬崩。 傳聞我的和親對象是個殘疾皇子恶座,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容