python框架之Django(3)-模版

經常使用語法

符號

{{...}} # 變量相關
{%...%} # 邏輯相關
{#...#} # 註釋

使用變量

1 def test(request):
2     name = '張三'
3     age = 19
4     return render(request,'test.html',{'name':name,'age':19})
/[app name]/views.py
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>模板測試</title>
 6 </head>
 7 <body>
 8     name:{{ name }} age:{{ age }}
 9 </body>
10 </html>
/templates/test.html
 
   
 
result

for循環

1 def test(request):
2     name_list = ['張三', '李四', '王五']
3     return render(request, 'test.html', {'list': name_list})
/[app name]/views.py
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>模板測試</title>
 6 </head>
 7 <body>
 8 {{ list }}
 9 <hr>
10 {% for name in list %}
11     {{ name }}
12 {% endfor %}
13 </body>
14 </html>
/templates/test.html
result

使用字典

1 def test(request):
2     name_dict = {'firstname': 'zhang', 'lastname': 'san'}
3     return render(request, 'test.html', {'dict': name_dict})
/[app name]/views.py
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>模板測試</title>
 6 </head>
 7 <body>
 8 {{ dict.firstname }}
 9 {{ dict.lastname }}
10 </body>
11 </html>
/templates/test.html
result

使用對象

 1 class Person:
 2     def __init__(self,firstname,lastname):
 3         self.firstname = firstname
 4         self.lastname = lastname
 5 
 6     def show(self):
 7         return 'my firstname is {},last name is {}'.format(self.firstname,self.lastname)
 8 
 9     def __str__(self):
10         return 'person obj name is {} {}'.format(self.firstname,self.lastname)
11 
12 def test(request):
13     p = Person('zhang','san')
14     return render(request, 'test.html', {'person': p})
/[app name]/views.py
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>模板測試</title>
 6 </head>
 7 <body>
 8 {{ person.firstname }}
 9 {{ person.lastname }}
10 <hr>
11 {{ person.show }}
12 <hr>
13 {{ person }}
14 </body>
15 </html>
/templates/test.html
result

Filters

語法: {{value|filter_name:params}} html

default

當所修飾的變量爲空時使用所指定的默認值jquery

1 def test(request):
2     v1= None
3     v2 = '有值'
4     return render(request, 'test.html', {'v1': v1,'v2':v2})
/[app name]/views.py
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>模板測試</title>
 6 </head>
 7 <body>
 8 {{ v1|default:'空值' }}
 9 <hr>
10 {{ v2|default:'空值' }}
11 </body>
12 </html>
/templates/test.html
result

filesizeformat

文件大小格式化django

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>模板測試</title>
 6 </head>
 7 <body>
 8 {{ 123456789|filesizeformat }}
 9 </body>
10 </html>
/templates/test.html
result

slice

切片app

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>模板測試</title>
 6 </head>
 7 <body>
 8 {{ 'abcdefghijklmn'|slice:'::2'}}
 9 </body>
10 </html>
/templates/test.html
result

date

時間格式化ide

1 def test1(request):
2     from datetime import datetime
3     now = datetime.now()
4     return render(request, 'test.html', {'now': now})
/[app name]/views.py
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>模板測試</title>
 6 </head>
 7 <body>
 8 {{ now }}
 9 <hr>
10 {{ now|date:'Y-m-d H:i:s'}}
11 </body>
12 </html>
/templates/test.html
result

safe

不轉義輸出oop

1 def test(request):
2     a_tag = '<a href="http://www.baidu.com">超連接<a>'
3     return render(request, 'test.html', {'a_tag': a_tag})
/[app name]/views.py
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>模板測試</title>
 6 </head>
 7 <body>
 8 {{ a_tag }}
 9 <hr>
10 {{ a_tag|safe }}
11 </body>
12 </html>
/templates/test.html
result

truncatechars

顯示指定長度字符,多餘部分用'...'代替測試

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>模板測試</title>
 6 </head>
 7 <body>
 8 {{ 'abcdefghijklmnopqrstuvwxyz'|truncatechars:10 }}
 9 </body>
10 </html>
/templates/test.html
result

自定義filter

1 from django import template
2 
3 register = template.Library()
4 
5 
6 @register.filter(name='append')
7 def add_sb(self, param1):
8     return '{}{}'.format(self, param1)
/[app name]/templatetags/myfilter.py
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>模板測試</title>
 6 </head>
 7 <body>
 8 {% load myfilter %}
 9 {{ '張三'| sb }}
10 </body>
11 </html>
/templates/test.html
result

Tags

自定義simpletag

1 from django import template
2 
3 register = template.Library()
4 
5 
6 @register.simple_tag(name='add_str3')
7 def my_sum(str1, str2, str3):
8     return '{}{}{}'.format(str1, str2, str3)
/[app name]/templatetags/mytag.py
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>test</title>
 6 </head>
 7 <body>
 8 {% load mytag %}
 9 
10 {% add_str3 'a' 'b' 'c' %}
11 </body>
12 </html>
/templates/test.html
result

inclusion_tag

1 from django import template
2 
3 register = template.Library()
4 
5 
6 @register.inclusion_tag('show_info_page.html')
7 def show_info(index):
8     list = [('張三', ''), ('李四', '')]
9     return {'person': list[index]}
/[app name]/templatetags/mytag.py
1 <h3>個人名字叫{{ person.0 }}</h3>
2 <p>性別{{ person.1 }}</p>
/[templates]/show_info_page.html
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>test</title>
 6 </head>
 7 <body>
 8 {% load mytag %}
 9 {% show_info 1 %}
10 <hr>
11 {% show_info 0 %}
12 </body>
13 </html>
/templates/test.html
result

母版頁

block

在母版頁中定義一個塊讓子頁面使用url

{% block [block name] %}
{% endblock %}
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6 </head>
 7 <body>
 8 這是母版頁的內容
 9 <hr>
10 {# 定義一個block塊讓子頁面替換 #}
11 {% block page-main %}
12 
13 {% endblock %}
14 </body>
15 </html>
/[templates]/base.html

extends

繼承母版頁spa

{% extends '[母版頁地址]' %}
{% block [block name] %}
{% endblock %}
1 {% extends 'base.html' %}
2 {%block page-main %}
3     這裏是子頁面的內容
4 {%endblock %}
/[templates]/test.html

擴展

forloop的屬性

Variable Description
forloop.counter 當前循環的索引值(從1開始)
forloop.counter0 當前循環的索引值(從0開始)
forloop.revcounter 當前循環的倒序索引值(從1開始)
forloop.revcounter0 當前循環的倒序索引值(從0開始)
forloop.first 當前循環是否是第一次循環(布爾值)
forloop.last 當前循環是否是最後一次循環(布爾值)
forloop.parentloop 本層循環的外層循環

for...empty

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>模板測試</title>
 6 </head>
 7 <body>
 8 {% for i in list %}
 9     有值則遍歷
10 {% empty %}
11     空空如也
12 {% endfor %}
13 </body>
14 </html>

with

定義一箇中間變量3d

1 {% with total=list.count %}
2     {{ total }}
3 {% endwith %}

include

引入指定頁

{% include '[頁面地址]' %}
<p>in subpage.html</p>
/templates/subpage.html
1 {% include 'subpage.html' %}
2 <hr>
3 in test.html
/templates/test.html

static&get_static_prefix

動態獲取靜態文件夾別名來拼接靜態文件的url

配置以下

STATIC_URL = '/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static1"),
    os.path.join(BASE_DIR, "static2"),
]

要訪問項目根目錄下文件夾static1裏的jquery.min.js文件,原來的寫法是:

<script src='/static/jquery.min.js'></script>

使用static的寫法是:

<script src="{% static 'jquery.min.js'%}"></script>

使用get_static_prefix的寫法是:

<script src='{% get_static_prefix %}jquery.min.js'></script>

也可給路徑起一個別名:

<script src="{% static 'jquery.min.js' as jquery_path %}"></script>
<!-- 以後就能夠經過別名引入 -->
<script src="{{ jquery_path }}"></script>
相關文章
相關標籤/搜索