Django基礎-template模版

template模版簡介

==【具體示例參照博文最後的綜合示例】==html

模版語法

模版組成前端

HTML + 邏輯控制代碼(如:python、PHP等)

邏輯控制代碼組成python

{{變量名稱}}

建立模版shell

Template("內容")

模版變量django

{'name':'text'}

Django環境後端

python manange.py shell

template模版 和 context上下文對象瀏覽器

>>>from django.template import Context,Template
>>>t = Template("Hello,{{ name }}")
>>>c = Context({'name':'Django'})
>>>t.render(c)
'Hello,Django'

句點符

句點符是一種 Django 深度查找變量比較快捷的一種方式,可用於字符串、字典、列表、類等多種類型的使用安全

變量的過濾器(filter)

語法

{{變量|filter:函數}}

默認函數

函數 釋義
add 給變量添加相應的值
addslashes 給變量中的引號加轉義符
capfirst 首字母大寫
cut 從字符串中移除指定字符
date 格式化日期字符串
default 若是值是False,替換成設置的值,不然爲原值
default_if_none 若是值是None,替換成設置的值,不然爲原值

自定義函數

建立自定義函數條件架構

  • 在app中建立templatetags模塊[必須使用此名稱]
  • 建立任意.py文件

須要固定格式app

from django import template
from django.utils.safestring import mark_safe

register = template.Library()
#register對象名稱是固定的,不可改變

#自定義過濾器【傳參只能傳一個】
@register.filter
def 自定義函數(參數):
    代碼塊
    return 返回值
    
#自定義標籤【不能用在控制語句】
@register.simple_tag
def 自定義函數(參數):
    代碼塊
    return 返回值

自定義過濾器使用

{{函數|自定義標籤名}}

自定義標籤使用

{% simple_tag_multi 值1 值2 %}

控制語句

if語句

語法

{%if 條件%}
    代碼塊
{%elif%}
    代碼塊
{%else%}
    代碼塊
{%endif%}

for循環語句

語法

{% for %}
    代碼塊
{% endfor %}
特殊變量 釋義
{{forloop.counter1}} 循環計數,後跟數字爲計數起始值
{{forloop.revcounter}} 反向循環
{{forloop.revcounter2}} 反向循環計數,後跟數字爲計數起始值
{{forloop.first}} 返回布爾值,第一次循環時值爲True,其它循環爲Flase
{{forloop.last}} 返回布爾值,最後一次循環時值爲True,其它循環爲Flase

csrf_token 驗證

  • Django視圖中間件的一種安全機制
  • 開啓方式: setting --- MIDDLEWARE 的參數中【默認開啓】
  • 若是開啓而且 模版中無 csrf_token 設置則返回403

setting開啓設置,關閉註釋便可,默認開啓狀態

'django.middleware.csrf.CsrfViewMiddleware',

模版設置

{% csrf_token %}

with 變量代替名

範圍僅限於 with 和 endwith 之間

用法

{% with 新變量名=原變量名%}
    新變量名代碼塊
{% endwith %}

verbatim 禁止render

範圍僅限於 verbatim 和 endverbatim 之間

{% verbatim %}
    代碼塊,所有以字符串形式出現
{% endverbatim %}

模版引入和模版繼承

詳見下文綜合示例

綜合示例

架構

Mydjango
    APP
        migrations
        templates
            backup.html
            index.html
            test.html
        templatetags
            MyTag.py
        admin.py
        apps.py
        models.py
        views.py
    Mydjango
        settings
        urls.py
        wsgi.py

全局配置

urls.py

from django.contrib import admin
from django.urls import path,re_path
from APP import views


urlpatterns = [
    path('admin/', admin.site.urls),
    re_path('^$',views.Test),
    path('backup',views.Back),
]

settings.py 改動

INSTALLED_APPS 中添加你創建的應用'APP',以,號結尾
TEMPLATES配置:
 'DIRS': [os.path.join(BASE_DIR, 'APP/templates')],

APP應用配置

views.py

# -*- coding:utf8 -*-
from django.shortcuts import render
import datetime
class C_test():
    def __init__(self,name):
        self.name=name
def Test(request):
    A = "<a href="">click</a>"
    S = "hello,'Django'"
    T = datetime.datetime.now()
    M = ''
    N = None
    L = ["一","二","三"]
    D = {"name":"小明","age":20}
    C = C_test("小紅")
    return render(request,"index.html",locals())
def Back(request):
    return render(request,"backup.html")

index.html

<style>
    *{color:green;}
</style>

{% block Alter%}                                                      <!--定義模版開始,模版名稱爲 Alter-->
<body>
<div>----------------------------------  句點符  ---------------------------------------- </div>
<div>{{ L }}</div>                                  <!-- 取整個列表-->
<div>{{ L.0 }}</div>                                <!--取列表中第一位-->

<div>{{ D }}</div>                                  <!--取整個字典-->
<div>{{ D.name }}</div>                             <!--取字典指定鍵的值-->

<div>{{ C }}</div>                                  <!--類的實例對象-->
<div>{{ C.name }}</div>                             <!--類對象中的變量-->

<div>----------------------------------  過濾器  ---------------------------------------- </div>
<div>{{ D.age|add:2 }}</div>                        <!--取字典指定鍵的值,並增長值-->
<div>{{ S|addslashes }}</div>                       <!--引號加轉義符-->
<div>{{ S|capfirst }}</div>                         <!--首字符變大寫-->
<div>{{ S|cut:'hello' }}</div>                      <!--移除指定字符-->
<div>{{ T}}</div>                                   <!--未通過處理日期-->
<div>{{ T|date }}</div>                             <!--通過處理的日期-->
<div>{{ M|default:"空值" }}</div>                   <!--空值處理-->
<div>{{ N|default_if_none:"none值" }}</div>         <!--None 值處理-->

<div>----------------------------------  篩選器  ---------------------------------------- </div>
<div>{{ S|first }}</div>                            <!--字符串第一位-->
<div>{{ S|last }}</div>                             <!--字符串最後一個位-->
<div>{{ S|length }}</div>                           <!--字符串長度-->
<div>{{ S|slice:":3" }}</div>                       <!--字符串前幾位-->
<div>{{ S|slice:":-5" }}</div>                      <!--字符串後幾位去掉-->
<div>----------------------------------  特殊符  ---------------------------------------- </div>
<div>{{ S|filesizeformat }}</div>                   <!--變量值大小-->
<div>{{ A|safe }}</div>                             <!--瀏覽器後端傳輸前端未渲染的內容渲染處理-->
<div>{{ S|urlencode }}</div>                        <!--編碼轉換-->

<div>----------------------------------  條件判斷  ---------------------------------------- </div>
{% if D.age > 20 %}
    <div>{{D.name}}的年齡大於20</div>
{% elif D.age is 20 %}
    <div>{{D.name}}的年齡等於20</div>
{% else %}
    <div>{{D.name}}的年齡小於20</div>
{%endif%}
<div>----------------------------------  for循環語句  ---------------------------------------- </div>
{% for i in L %}
    <div>第{{forloop.counter}}次循環,循環內容{{i}}</div>
{% endfor %}

<div>----------------------------------  模版繼承  ---------------------------------------- </div>
<ul>
    <li>【模版範圍是模版代碼開始和結束之間的內容】</li>
    <li>【模版內容包含的變量代碼不能繼承,只能繼承靜態代碼】</li>
</ul>
</body>
{% endblock%}                                                           <!--定義模版結束-->

test.html

<div>用於引用測試的HTML文件</div>

backup.html

{% extends "index.html" %}                               <!--模版繼承-->
{% load staticfiles %}                                   <!--用於引用其餘靜態文件-->
{% block Alter%}                                         <!-- 引用模版 Alter 開始-->
<style>
    *{background: yellow;}                               /*新增樣式示例*/
</style>
{{ block.super}}                                         <!-- 獲取父類內容-->
{% include "test.html"%}                                 <!--引入的 HTML 測試靜態文件-->
{% endblock%}                                            <!-- 引用模版 Alter 結束-->

訪問 http://127.0.0.1:8000 效果展現測試

---------------------------------- 句點符 ----------------------------------------
['一', '二', '三']
一
{'name': '小明', 'age': 20}
小明
<APP.views.C_test object at 0x000001927B2C1D30>
小紅
---------------------------------- 過濾器 ----------------------------------------
22
hello,\'Django\'
Hello,'Django'
,'Django'
Aug. 29, 2018, 5:10 p.m.
Aug. 29, 2018
空值
none值
---------------------------------- 篩選器 ----------------------------------------
h
'
14
hel
hello,'Dj
---------------------------------- 特殊符 ----------------------------------------
0 bytes
click
hello%2C%27Django%27
---------------------------------- 條件判斷 ----------------------------------------
小明的年齡等於20
---------------------------------- for循環語句 ----------------------------------------
第1次循環,循環內容一
第2次循環,循環內容二
第3次循環,循環內容三
---------------------------------- 模版繼承 ----------------------------------------
【模版範圍是模版代碼開始和結束之間的內容】
【模版內容包含的變量代碼不能繼承,只能繼承靜態代碼】

訪問 http://127.0.0.1:8000/backup 模版繼承和改動測試

---------------------------------- 句點符 ----------------------------------------
---------------------------------- 過濾器 ----------------------------------------
空值
---------------------------------- 篩選器 ----------------------------------------
0
---------------------------------- 特殊符 ----------------------------------------
0 bytes
---------------------------------- 條件判斷 ----------------------------------------
的年齡小於20
---------------------------------- for循環語句 ----------------------------------------
---------------------------------- 模版繼承 ----------------------------------------
【模版範圍是模版代碼開始和結束之間的內容】
【模版內容包含的變量代碼不能繼承,只能繼承靜態代碼】
相關文章
相關標籤/搜索