模板語法


模板語法

CBV源碼剖析

#FBV和CBV
'''
他們兩個都是出現在視圖函數views中的,視圖函數沒必要必須是函數,也可以是一個類,當我們定義一個類的時候就是CBV了,CBV下是通過在類內部定義請求方式的同名函數來進行不同的操作的。
通過對源碼的查看,可以看出其實本質上CBV也是FBV。當請求來的時候會去判斷請求的方式,利用反射去執行定義的相應函數。
'''
# CBV的使用方式:
from django.views import View  # 首先需要導入對應的模塊
url(r'^index/', views.MyCBV.as_view()) # as_view()是一個閉包函數

'''
在django啟動的時候,帶括號就會自動觸發執行,as_view()返回其本身內部定義的一個view函數的內存地址,當匹配到路由的時候,就會執行該函數,函數內部的本質就是判斷請求的方式,然后反射到類創建的對象來執行。
'''

看源碼謹記:

  1. 先從對象自己找,再從產生對象的類中找,之后再去父類中找。
  2. 看源碼看到了self,要知道該self傳的是什么東東。

模板語法傳值

整理出的規則:

  1. {{ }}:在前端中一般使用是變量相關
  2. {% %}:邏輯相關

基本上所有的數據類型都可以傳前端,在前端都可以直接使用{{}}來進行使用,容器類型都只能使用點的方式進行 ,同時還可以使用點索引的方式,兩者還可以混用。

傳遞函數名會自動加括號調用,不過不支持函數傳參數。傳類名的時候也會自動加括號調用進行實例化。

過濾器

過濾器就類似於是模板語法內置的內置語法,最多只能有兩個參數。

# 基本語法
{{ 數據|過濾器:參數}}

# 在寫前端項目的時候,部分前端代碼可以經由后段代碼傳到前端並進行解析。
|safe  # 告訴前端這是安全的,然后會解析

# 在后端向前端傳需要導入模塊
from gjango.utils.safestring import mark_safe
res = mark_safe('前端代碼字符串') 

統計長度:{{ s|length }}
默認值:{{ s|default:'前面的false才會顯示我' }}
文件大小:{{ f|filesizeformat }}
日期格式化:{{ time|date:'Y-m-d' }}
切片操作(支持步長):{{ l|slice:'0:5:2' }}
切取字符:{{ info|truncatechars:9 }}
切取單詞(按照空格進行切):{{ msg|truncatewords:9 }}
移除特定的字符:{{ msg|cut:'A' }}
拼接操作(可進行數字或者字符串):{{ n|add:10 }}
轉義:{{ hhh|safe }}
轉義:{{ res }}

標簽

# for 循環
{% for foo in l %}
	<p>{{ forloop }}</p>
	{% empty %}
    	l是空的時候執行的標簽
{% endfor %}

# if判斷
{% if a %}
	標簽體
{% elif s %}
	標簽體
{% else s %}
	標簽體
{% endif %}


# with起別名

{% with xxx as ooo %}
	在這個內部就可以通過別名快速獲取前面的xxx
{% endwith %}

自定義過濾器、標簽和inclusion_tag

'''
首先進行三步:
	1. 在應用下創建一個名字叫templatetags文件夾
	2. 在該文件夾新愛創建任意名稱的py文件
	3. 在py文件中必須書寫下面兩句話:
		from django import template
		register = template.Library()

接下來就可以進行自定義了
'''
@register.filter(name='過濾器名字')
def my_tag(a):
    return XXX

{% load py文件 %}

{{ s|過濾器名字}}


# 自定義標簽(參數可以有多個)  相當於函數
@register.simple_tag(name='標簽名')
def index(a,b):
    return '1,2,3'
 
使用{% 標簽名 參數 %}  # 多個參數之間使用空格


# 自定義 inclusion_tag
'''
在html頁面的某一個地方的頁面需要傳參數才能渲染出來,並且在多個頁面都要使用,那么就可以考慮將該局部頁面做成inclusion_tag形式
其原理就是先定義一個方法,在頁面上調用該方法並傳值,該方法會傳一些數據給html頁面,然后將渲染好的結果放到調用的位置
'''
@register.inclusion_tag('html頁面')
def left(n):
    data = XXX
    return locals()  # 推薦是想用這一種
	return {'data':data}

{% left 5 %}  # 使用

模板的繼承

當某些頁面只需要局部進行更改而整體不會進行改變的時候,就可以使用模板的繼承

步驟如下:

  1. 創建一個html文件,將之全部內容刪除。

  2. {% extends '繼承的頁面模板' %}

  3. {% block content %}

      模板內容
    

    {% endblock%}

    在模板頁面找到需要進行修改的內容

  4. 在子頁面對區域進行更改

    {% block content %}

      子頁面內容
    

    {% endblock%}

一般情況新愛模板頁面應該至少有三塊被修改的區域

  1. css區域
  2. html區域
  3. js區域
{% block css %}
{% endblock %}
  

{% block content %}
{% endblock %}
  
{% block js %}
{% endblock %}

模塊的導入

加入某一個局部使用較多的話 可以當做模塊進行導入

{% incluse '模塊文件' %}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM