1. 程式人生 > >1.2模板templates

1.2模板templates

一.模板使用

1. 配置模板目錄

如果命令列建立的專案,需要手動配置模板檔案目錄,如果是Pycharm建立的專案,則無需配置

  • 在專案根目錄下建立模板目錄,比如叫 templates,後續開發模板檔案會放在此目錄下
  • 在專案的配置檔案settings.py檔案中,進行模板目錄的配置,如下:

 

2. 定義模板檔案

 在templates目錄中新建一個模板檔案,如show.html

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8     <!-- 顯示模板變數 -->
 9     <h1>{我的名字是:{ name }}</h1>
10 
11 </body>
12 </html>

 

3. 模板渲染

方法一:通過render函式

1 from django.shortcuts import render
2 
3 def index(request):
4     data_dict = {'name': 'django' }
5     # 引數1:請求物件
6     # 引數2:模組路徑
7     # 引數3:字典資料
8     return render(request, 'index.html', data_dict)

 

  

方法二:通過Template物件的render方法

 1 from django.template import loader
 2 
 3 def index(request):
 4     # 獲取模板物件
 5     template = loader.get_template('index.html')  # type: Template
 6     # 渲染得到字串
 7     data_dict = {'name': 'django' }
 8     html_str = template.render(data_dict)
 9     # 響應請求
10     return HttpResponse(html_str)

 

二.模板的語法

  • 模板變數
  • 模板語句
  • 過濾器
  • 註釋
  • 模板繼承

1. 模板變數

變數名必須由字母、數字、下劃線(不能以下劃線開頭)和點組成,語法如下:

{{ 變數 }}

模板變數可以使python的內建型別,也可以是物件。

2. 模板語句

1)for迴圈:

{% for item in 列表 %}
    {{forloop.counter}}  <1-- 表示當前是第幾次迴圈,從1開始 -->
    {{forloop.counter0}}  <!-- 表示當前是第幾次迴圈,從0開始 -->
{% empty %}  查下
    列表為空或不存在時執行此邏輯
{% endfor %}

2)if條件:

{% if ... %}
    邏輯1
{% elif ... %}
    邏輯2
{% else %}
    邏輯3
{% endif %}

比較運算子如下:

==
!=
<
>
<=
>=

布林運算子如下:

and
or
not

注意:運算子左右兩側必須有空格。

{% if a == 1 %}  # 正確
{% if a==1 %}  # 錯誤

3. 過濾器

語法如下:

  • 使用管道符號|來應用過濾器,用於進行計算、轉換操作,可以使用在變數、標籤中。
  • 如果過濾器需要引數,則使用冒號:傳遞引數。

    變數|過濾器:引數     {% if forloop.counter|divisibleby:2 %}
    列舉幾個如下:
  • safe,禁用html轉義(顯示html標籤樣式,而不是字串)
  • length,長度,返回字串包含字元的個數,或列表、元組、字典的元素個數。
  • default,預設值,如果變數不存在時則返回預設值。

    data|default:'預設值'
    
  • date,日期,用於對日期型別的值進行字串格式化,常用的格式化字元如下:

    • Y表示年,格式為4位,y表示兩位的年。
    • m表示月,格式為01,02,12等。
    • d表示日, 格式為01,02等。
    • j表示日,格式為1,2等。
    • H表示時,24進位制,h表示12進位制的時。
    • i表示分,為0-59。
    • s表示秒,為0-59。
    value|date:"Y年m月j日  H時i分s秒"

4. 註釋

1)單行註釋語法如下:

{#...#}

2)多行註釋使用comment標籤,語法如下:

{% comment %}
...
{% endcomment %}

5. 模板繼承

  • 模板繼承和類的繼承含義是一樣的
  • 可以使用模板繼承來複用父模板,提高程式碼的複用性,減輕開發人員的工作量。
  • 可以通過定義 block ,實現子模板對父模組內容的重寫

父模板

如果發現在多個模板中某些內容相同,那就可以使用block標籤把這段內容定義到父模板中。

{% block 塊名稱 %}
    預留區域,可以編寫預設內容,也可以沒有預設內容
{% endblock %}

子模板

  1. 使用extends標籤繼承父模板,寫在子模板檔案的第一行。

     {% extends "父模板路徑" %}
    
  2. 對有需要的block進行重寫:

    • 不用重寫父模版中的所有block,如果子模版沒有重寫,則使用父模版定義的預設值。
    • 可以使用 block.super 來包含父模板的塊中定義的內容,如下

        {% block 名稱 %}
            子模板的內容
            {{ block.super }}    顯示父模板中block的內容
        {% endblock %}

django文件參考

<https://docs.djangoproject.com/zh-hans/2.1/ref/templates/builtins/>

django過濾器大全

<https://www.cnblogs.com/Deaseyy/p/10859893.html>

&n