1. 程式人生 > >Django框架 之 模板語言

Django框架 之 模板語言

字符數 tom 存在 counter 代碼 lock view class sem

瀏覽目錄

  • 標簽
  • 過濾器

一、標簽 Tags

1、普通變量

  • 普通變量用{{ }}
  • 變量名由數字、字母、下劃線組成
  • 點.在模板語言中用來獲取對象相應的屬性值

示例:

{# 取variable中的第一個參數 #}
{{ variable.0 }}
{# 取字典dic中key的值 #}
{{ dic.key }}
{# 取obj_list對象列表中第一個對象的attr屬性值 #}
{{ obj_list.0.attr }}
{# 點操作只能調用不帶參數的方法 #}
{{ obj_list.0.method }}  

2、邏輯判斷

邏輯判斷用{% %}

for

  • 語法:{% for item in item_list %}...{% empty %}...{% endfor %}
  • 作用:循環item_list,如果item值為空或不存在,則會執行empty中的代碼,切記要寫endfor結束循環
  • 常用for循環參數:

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

if

  • 語法:
    {% if some_condition %}...{% elif other_condition %}...{% endif %}
  • 作用:條件判斷,切記要寫endif結束條件判斷
  • 常用與if語句結合的判斷關鍵字
    {% if some_condition %}...{% elif other_condition %}...{% endif %}
    

with

  • 語法
{% with new_variable = old_variable %}.....{% endwith %}
  • 作用:定義中間變量

csrf_token

  • 語法:在頁面的每個form表單中寫上

{% csrf_token %}
  • 作用:用於跨站請求偽造保護

註釋

語法:

{# 註釋內容 #}

3、母板系統

繼承

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Title</title>
  {% block page-css %}
  
  {% endblock %}
</head>
<body>

<h1>這是母板的標題</h1>

{% block page-main %}

{% endblock %}
<h1>母板底部內容</h1>
{% block page-js %}

{% endblock %}
</body>
</html>
  • 語法
{% extends ‘base.html‘ %}
  • 作用:在子頁面中在頁面最上方使用上面的語法來繼承母板

塊block

  • 語法
{% block block_name %}...{% endblock %}
  • 作用:在子頁面中通過定義母板中的block名來對應替換母板中相應的內容

示例:

{% block page-main %}
  <p>世情薄</p>
  <p>人情惡</p>
  <p>雨送黃昏花易落</p>
{% endblock %}

組件

  • 語法
{% include ‘subassembly.html‘ %} 
  • 作用:可以將常用的固定的HTML內容保存在單獨的文件中,在需要的地方用以上語法導入使用

4、靜態文件相關

在Settings中設置static靜態文件夾,在html中導入。

語法:

{% load static %}  

例如:

{% load static %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />

引用JS文件時使用:

{% load static %}
<script src="{% static "mytest.js" %}"></script>

某個文件多處被用到可以存為一個變量  

{% load static %}
{% static "images/hi.jpg" as myphoto %}
<img src="{{ myphoto }}"></img>

使用get_static_prefix

{% load static %}
<img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" />  

或者

{% load static %}
{% get_static_prefix as STATIC_PREFIX %}

<img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" />
<img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" />  

5、自定義simpletag

  • 作用:可以自定義標簽,註冊後可使用
  • 自定義simpletag的步驟(與自定義Filter類似,不過接收更靈活的參數)

    • 在項目的app中創建名為templatetags的文件夾
    • 在templatetags的文件夾中創建自定義的py文件,例如:custom_simpletag.py
    • custom_simpletag.py中編寫自定義simpletag,例如:

from django import template
register = template.Library()

@register.simple_tag(name="my_simpletag")
def add_simpletag(a,b,c): # 可接收多個參數
return "{} + {} + {}".format(a, b, c)
    • 使用自定義simple_tag前,首先在HTML頁面中導入py文件
{% load custom_simpletag %}
{% my_simpletag "1" "2" "3" %} 

6、自定義inclusion_tag

  • 作用:返回html代碼片段
  • 自定義inclusion_tag的步驟

    • 在項目的app中創建名為templatetags的文件夾
    • 在templatetags的文件夾中創建自定義的py文件,例如:custom_inclusiontag.py
    • custom_inclusiontag.py中編寫自定義inclusiontag,例如:

from django import template
register = template.Library()

@register.inclusion_tag(‘inclusion_tag.html‘)
def my_inclusiontag(n):
n = 1 if n < 1 else int(n)
data = ["第{}項".format(i) for i in range(1, n+1)]
return {"data": data}
    • 在templates文件夾中創建剛才註冊的inclusion_tag.html文件
<ul>
  {% for choice in data %}
  <li>{{ choice }}</li>
  {% endfor %}
</ul>
    • 使用自定義my_inclusiontag前,首先在HTML頁面中導入py文件 
{% load custom_inclusiontag %}
{% my_inclusiontag 10 %}

二、過濾器 Filter

1、內置過濾器

語法:

{{ value|filter_name:args }}

註意:管道符前後沒有空格  

default

  • 語法:
{{ value: default: "自定義內容"}}  
  • 作用:如果value值沒傳的話就顯示自定義內容

length

  • 語法:
{{ value|length }} 
  • 作用:返回value的長度,如 value=[‘a‘, ‘b‘, ‘c‘, ‘d‘]的話,就顯示4.

filesizeformat

  • 語法:
{{ value|filesizeformat }}  
  • 作用:將value格式化為一個 “人類可讀的” 文件大小格式

如果 value 是 123456789,輸出將會是 117.7 MB。

slice

  • 語法:
{{value|slice:"start:end"}} 
  • 作用:切片

date

  • 語法:
{{ value|date:"Y-m-d H: i:s"}}  
  • 作用:將時間格式的value進行自定義格式化

safe

  • 語法:
{{value|safe}} 
  • 作用:取消Django對HTML標簽和JS等語法標簽進行自動轉義,認為插入的HTML或JS是安全的不必轉義

truncatechars

  • 語法:
{{ value|truncatechars:num}}  
  • 作用:如果字符串字符多於指定的字符數量,那麽會被截斷。截斷的字符串將以可翻譯的省略號序列(“…”)結尾。num參數是指截斷的字符數

2、自定義過濾器

步驟

  • 在項目的app中創建名為templatetags的文件夾
  • 在templatetags的文件夾中創建自定義的py文件,例如:custom_filter.py
  • 在custom_filter.py中編寫自定義過濾器,例如:

from django import template
register = template.Library()

@register.filter(name="my_filter")
def my_filter(value, arg): #最多接收兩個參數
return value.replace(arg, "")
  • 使用自定義filter前,首先在HTML頁面中導入py文件
{% load custom_filter %}
{{ variable|my_filter:"0" }}

  

 

Django框架 之 模板語言