程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Django模板(一)

編輯:Python

目錄

一、模板使用步驟

1.創建模板

2.配置(設置模板查找路徑)

3.模板接收視圖傳入的數據

4.模板處理數據

5. 查看模板處理數據成果

二、Django使用自帶模板

1.配置

2.定義模板

3.模板渲染

4.模板語法

4.1 模板變量

4.2 模板語句

4.3 注釋

5.過濾器

6.模板繼承


一、模板使用步驟

  • 1.創建模板
  • 2.設置模板查找路徑
  • 3.模板接收視圖傳入的數據
  • 4.模板處理數據

1.創建模板

  • 應用同級目錄下創建模板文件夾templates. 文件夾名稱固定寫法.
  • 在templates文件夾下, 創建應用同名文件夾. 例, Book
  • 應用同名文件夾下創建網頁模板文件. 例 :index.html

2.配置(設置模板查找路徑)

在工程中創建模板目錄templates。

在settings.py配置文件中修改TEMPLATES配置項的DIRS值:

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 此處修改
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

 如圖:

3.模板接收視圖傳入的數據

在應用的views.py中傳入數據:
 

from django.shortcuts import render
# Create your views here.
def index(request):
context = {'title': '模板數據處理'}
return render(request,'book/index.html',context)

4.模板處理數據

在views.py中定義了context文本,將數據傳入模板中,模板通過title鍵,讀取字典的值

5. 查看模板處理數據成果

二、Django使用自帶模板

1.配置

在工程中創建模板目錄templates。

在settings.py配置文件中修改TEMPLATES配置項的DIRS值:

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 此處修改
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

2.定義模板

在templates目錄中新建一個模板文件,如index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{
{ city }}
</body>
</html>

3.模板渲染

調用模板分為兩步驟:

  1. 找到模板 loader.get_template(模板文件在模板目錄中的相對路徑) -> 返回模板對象

  2. 渲染模板 模板對象.render(context=None, request=None) -> 返回渲染後的html文本字符串 context 為模板變量字典,默認值為None request 為請求對象,默認值為None

例如,定義一個視圖

from django.http import HttpResponse
from django.template import loader
def index(request):
# 1.獲取模板
template=loader.get_template('index.html')
context={'city': '北京'}
# 2.渲染模板
return HttpResponse(template.render(context))

Django提供了一個函數render可以簡寫上述代碼。

render(request對象, 模板文件路徑, 模板數據字典)

from django.shortcuts import render
def index(request):
context={'city': '北京'}
return render(request,'index.html',context)

4.模板語法

4.1 模板變量

變量名必須由字母、數字、下劃線(不能以下劃線開頭)和點組成。

語法如下:

{
{變量}}

模板變量可以使python的內建類型,也可以是對象。

def index(request):
context = {
'city': '北京',
'adict': {
'name': '西游記',
'author': '吳承恩'
},
'alist': [1, 2, 3, 4, 5]
}
return render(request, 'index.html', context)

 

4.2 模板語句

1)for循環:

{% for i in views_list %}
{
{ i }}
{% endfor %}

{% for %} 允許我們在一個序列上迭代。

與 Python 的 for 語句的情形類似,循環語法是 for X in Y ,Y 是要迭代的序列而 X 是在每一個特定的循環中使用的變量名稱。每一次循環中,模板系統會渲染在 {% for %} 和 {% endfor %} 之間的所有內容。

示例:

2)if條件:

{% if condition %}
... display
{% endif %}

或者

{% if condition1 %}
... display 1
{% elif condition2 %}
... display 2
{% else %}
... display 3
{% endif %}

比較運算符如下:

==
!=
<
>
<=
>=

布爾運算符如下:

and
or
not

注意:運算符左右兩側不能緊挨變量或常量,必須有空格。

4.3 注釋

1)單行注釋語法如下:

{# 注釋語句 #}

2)多行注釋使用comment標簽,語法如下:

{# comment #}
多行注釋
{# endcomment #}

5.過濾器

語法如下:

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

列舉幾個如下:

  • safe,禁用轉義,告訴模板這個變量是安全的,可以解釋執行

  • 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秒"

6.模板繼承

模板繼承和類的繼承含義是一樣的,主要是為了提高代碼重用,減輕開發人員的工作量。

父模板

如果發現在多個模板中某些內容相同,那就應該把這段內容定義到父模板中。

標簽block:用於在父模板中預留區域,留給子模板填充差異性的內容,名字不能相同。 為了更好的可讀性,建議給endblock標簽寫上名字,這個名字與對應的block名字相同。父模板中也可以使用上下文中傳遞過來的數據。

子模板

標簽extends:繼承,寫在子模板文件的第一行。

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

子模版不用填充父模版中的所有預留區域,如果子模版沒有填充,則使用父模版定義的默認值。

{% extends "父模板路徑" %}

填充父模板中指定名稱的預留區域。

{% block 名稱 %}
實際填充內容
{
{ block.super }}用於獲取父模版中block的內容
{% endblock 名稱 %}

}


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved