1. 程式人生 > >Django學習之 - 基礎模板語言

Django學習之 - 基礎模板語言

註冊 技術 全部 自定義 index clas 網頁 mon method

模板語言循環
1:如果模板語言遇到列表,直接進行循環取值即可。
2:如果模板語言遇到字典進行循環有以下3種:
  - for item in dict.keys 只循環獲取字典key
  - for item in dict.value 只循環獲取字典value
  - for k,v in dict.items 循環獲取字典的key,value全部。
實例url:fordict # 字典for循環的取值方法

技術分享
1 userlist = {
2     1: {name: jack, age: 36},
3     2
: {name: anna, age: 26}, 4 3: {name: vivi, age: 16}, 5 } 6 def fordict(request): 7 return render(request,dict_for.html,{ulist:userlist})
View Code 技術分享
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>
循環字典</title> 6 </head> 7 <body> 8 <div> 9 {% for k in ulist.keys %} 10 <div>字典key:{{ k }}</div> 11 {% endfor %} 12 <hr /> 13 {% for v in ulist.values %} 14 <div>字典value:{{ v }}</div> 15 {% for k1,v1 in v.items %} 16 <
div>字典k - v: {{ k1 }} -- {{ v1 }}</div> 17 {% endfor %} 18 {% endfor %} 19 <hr /> 20 {% for k,v in ulist.items %} 21 <div>字典k - v:{{ k }} - {{ v }}</div> 22 {% endfor %} 23 <hr /> 24 <hr /> 25 {% for k,v in ulist.items %} 26 {# <div><a href="/detail?nid={{ k }}">{{ v.name }}</a></div>#} 27 <div><a href="/detail-{{ k }}.html">{{ v.name }}</a></div> 28 {% endfor %} 29 </div> 30 </body> 31 </html>
HTML

實例url:detail # 查看詳情

技術分享
 1 url寫法
 2     # url(r‘^detail‘,views.detail),
 3     # url(r‘^detail-(\d+).html‘,views.detail), # 正則寫法
 4     url(r^detail-(?P<nid>\d+).html,views.detail), # 正則分組寫法
 5 
 6 視圖函數
 7 def detail(request,nid):
 8     # nid = request.GET.get(‘nid‘)
 9     curr_info = userlist[nid]
10     return render(request,detail.html,{detail_info:curr_info})
View Code 技術分享
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>詳細信息</title>
 6 </head>
 7 <body>
 8     <form action="/index" method="post">
 9         <input type="text" name="user" placeholder="用戶名" />
10         <input type="text" name="email" placeholder="email" />
11         <input type="submit" value="提交" />
12     </form>
13     <ul>
14         {% for k,v in detail_info.items %}
15             <li>{{ k }} -- {{ v }}</li>
16         {% endfor %}
17     </ul>
18 </body>
19 </html>
HTML

3:模板繼承(實例包含titil,css content,js)
實例:master.html 母版

技術分享
 1 {% block func %}{% endblock %}
 2 <!DOCTYPE html>
 3 <html lang="en">
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>{% block tital %}{% endblock %}</title>
 7     <link rel="stylesheet" href="/static/commons.css" />
 8     {% block css %}{% endblock %}
 9 </head>
10 <body>
11 
12 <h1>母版繼承</h1>
13 {% block content %}{% endblock %}
14 <script src="/static/jquery-1.12.4.min.js"></script>
15 {% block js %}{% endblock %}
16 </body>
17 </html>
母板

實例:slave.html 繼承版

技術分享
 1 {% extends ‘master.html‘ %}
 2 {% load func1 %}
 3 {% block tital %}繼承版{% endblock %}
 4 {% block css %}
 5     <style>
 6         body{ background:#eeeeee}
 7     </style>
 8 {% endblock %}
 9 {% block content %}
10     <h2>繼承版本</h2>
11     {% include ‘tag.html‘ %}
12     {% include ‘tag.html‘ %}
13     {% include ‘tag.html‘ %}
14     {% include ‘tag.html‘ %}
15     {% count 20 40 %}
16 {% endblock %}
17 {% block js %}
18     <script>alert(js繼承)</script>
19 {% endblock %}
繼承版

註意:繼承一個網頁只能繼承一個模板
4:模板導入
在html文件中使用:{% include ‘tag.html‘ %} 可以將tag.html網頁內容導入到文件中。
5:自定義函數
simple_tag
1:在app下創建templatetags目錄
2:在此目錄下建立任意xxx.py文件
3:在py文件中註冊simple_tag,以下為固定寫法,不能修改
  from django import template
  register = template.Library() # 創建template對象,
  @register.simple_tag
  def func(a1,a2,a3..):
    return "str..."
4:settings中註冊app
5:在需要引入的html文件的頂部載入py文件,{% load xxx %}
6:html文件中使用:{% 函數名 arg1 arg2... %}
優點:支持多個參數傳入
缺點:不能應用到條件判斷中
filter
1:在app下創建templatetags目錄
2:在此目錄下建立任意xxx.py文件
3:在py文件中註冊simple_tag,以下為固定寫法,不能修改
  from django import template
  register = template.Library() # 創建template對象,
  @register.filter
  def func(a1,a2):
    return "str..."
4:settings中註冊app
5:在需要引入的html文件的頂部載入py文件,{% load xxx %}
6:html文件中使用:{{ arg1|函數名:arg2 }}
優點:可以應用在條件判斷中 {% if "china"|cstr:‘beijing‘ %} {% endif %}
缺點:只支持2個參數傳入,不能加空格
如:simple_tag 和 filter

技術分享
 1 from django import template
 2 register = template.Library()
 3 @register.simple_tag
 4 def count(a1,a2,a3):
 5     num = a1 + a2 + a3
 6     return num
 7 @register.filter
 8 def cstr(a1,a2):
 9     num = a1 + a2
10     return num
11 @register.filter
12 def power(a1):
13     return a1.upper()
View Code

html文件對應寫法

技術分享
1 {% load func1 %} # 導入py文件
2 <!DOCTYPE html>
3 <html lang="en">
4 <head></head>
5 <body>
6 {% count 10 20 %} # 對應simple_tag輸出30
7 {{ "china"|cstr:‘beijing‘ }} # 對應filter輸出chinabeijing
8 {{ ‘china‘|power }} #轉換為大寫
9 </body>
View Code

Django學習之 - 基礎模板語言