Django之模板系統

来源:https://www.cnblogs.com/gengbinjia/archive/2019/05/06/10817627.html
-Advertisement-
Play Games

變數的使用: def test(request): num=1 s='hello' li=[1,2,['a','b']] dic={'name':'w','age':1} se={1,2,3} tup=(1,2,3,4) def my_test(): return '這是my_test' class ...


變數的使用:

 

複製代碼
def test(request):
    num=1
    s='hello'
    li=[1,2,['a','b']]
    dic={'name':'w','age':1}
    se={1,2,3}
    tup=(1,2,3,4)
    def my_test():
        return '這是my_test'
    class test1:
        def __init__(self,name):
            self.name=name
        @classmethod
        def classM(cls):
            return '這是類方法'
        @staticmethod
        def staM():
            return '這是staticmethod方法'
        def get_name(self):
            return self.name
    t=test1('wdj')
    return render(request,'test.html',locals())
複製代碼

 

在views中定義上面的函數,locals()是將命名空間中所有變數全部傳入前端

上圖傳入的變數有:整型,字元串,列表,字典,集合,元組,無參函數,類的對象

在前端的使用方式:

 

複製代碼
<p>數字:{{ num }}</p>
<p>字元串:{{ s }}</p>
<p>列表:{{ li }}</p>
<p>字典:{{ dic }}</p>
<p>集合{{ se }}</p>
<p>元組:{{tup }}</p>
<p>函數:{{my_test}}</p>
<P>對象:{{ t }}</P>
<P>對象屬性{{ t.name }}</P>
<P>對象函數{{ t.get_name }}</P>
<P>類函數{{ t.classM }}</P>
<P>全局函數{{ t.staM }}</P>
複製代碼

 

模板中支持的寫法:

 {# 取l中的第一個參數 #}{{ l.0 }}

{# 取字典中key的值 #}
{{ d.name }}
{# 取對象的name屬性 #}
{{ person_list.0.name }}
{# .操作只能調用不帶參數的方法 #}
{{ person_list.0.dream }}

註意:傳進來的函數一定不能是含參函數

Filter(過濾器):
語法: {{ value|filter_name:參數
}}
'|'左右沒有空格沒有空格沒有空格
過濾器會把左邊的值當做第一個參數傳遞給後面的過濾器,過濾器後面的值會當做第二個參數傳遞給過濾器
常用過濾器:

    1.default



{{ value|default: "nothing"}}

   如果value值沒傳的話就顯示nothing

  2.length:{{ value|length }}

   返回value的長度,如 value=['a', 'b', 'c', 'd']的話,就顯示4.

  3.filesizeformat

將值格式化為一個 “人類可讀的” 文件尺寸 (例如 '13 KB''4.1 MB''102 bytes', 等等)。例如:

{{ value|filesizeformat }}

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

4.slice

切片

{{value|slice:"1:3"}}

從索引為1切到索引為3,不保留3,前閉後開,後面的參數可以為負數

5.date

格式化

{{ value|date:"Y-m-d H:i:s"}}

 

6.safe

Django的模板中會對HTML標簽和JS等語法標簽進行自動轉義,原因顯而易見,這樣是為了安全。但是有的時候我們可能不希望這些HTML元素被轉義,比如我們做一個內容管理系統,後臺添加的文章中是經過修飾的,這些修飾可能是通過一個類似於FCKeditor編輯加註了HTML修飾符的文本,如果自動轉義的話顯示的就是保護HTML標簽的源文件。為了在Django中關閉HTML的自動轉義有兩種方式,如果是一個單獨的變數我們可以通過過濾器“|safe”的方式告訴Django這段代碼是安全的不必轉義。

比如:

value = "<a href='#'>點我</a>"

{{ value|safe}}

 

7.truncatechars

如果字元串字元多於指定的字元數量,那麼會被截斷。截斷的字元串將以可翻譯的省略號序列(“...”)結尾。

參數:截斷的字元數

{{ value|truncatechars:9}}
其中...算3個字元位置

8.truncatewords

和truncatechars不同,這是按照空格的數量截斷的,同樣的。截斷的字元串將以可翻譯的省略號序列(“...”)結尾。

參數:截斷的字元數

{{ value|truncatewords:3}}
其中...算3個字元位置


自定義過濾器:
必須做下麵三件事:

1.必須在應用下新建一個名為templatetags的文件夾

2.在該文件夾下創建一個任意名的py文件

3.在該文件內必須先寫下麵兩句話

from django import template

register=template.Library()
 
定義過濾器:

@register.filter(name='baby')
def my_sum(a,b)
return a+b
自定義標簽:

@register.sumple_tag(name='plus')
def plus(a,b,c):
return '%s-%s-%s'
使用方法:


{% load my_tags %}
{{ num|baby:2 }}
{% s_tag 'w' 'a' 'd' %}
{{}}變數相關 {%%}邏輯相關 註意:自定義的過濾器可以在if和for中使用,但是自定義的標簽不能使用   自定義inclusion_tag: 調用自定義的inclusion_tag能夠返回一段html代碼、 比如form表單,表格,列表 通常用於動態生成的HTML頁面 自定義inclusion_tag @register.inclusion_tag('login.html') def get_html(n): l=[] for i in range(n): i.append('第%項'%i) return {'l':l}   模板的繼承和導入: 在模板中指定一片區域命名為content     {% extends 'home.html'%} 引用home頁面 {% block content%} {%endblock%}   調用主頁面的代碼:
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 背景 電商中有這樣的一個場景: 1. 下單成功之後送積分的操作,我們使用mq來實現 2. 下單成功之後,投遞一條消息到mq,積分系統消費消息,給用戶增加積分 我們主要討論一下,下單及投遞消息到mq的操作,如何實現?每種方式優缺點? 方式一 step1:start transaction step2: ...
  • 老王的股票 大家好,我是小趙,目前任職藏劍山莊高級鑄劍師,在山莊裡和我玩的比較好的有老王和老劉他們幾個,都是組長級別的二貨們,經常混在一起打牌。 今天上午閑得蛋疼晃悠晃悠的晃到的老王的地盤,看到老王在埋頭寫程式: 這老王似乎在炒股票,好專業的樣子。 於是我伸手拍了拍老王的肩膀:“幹啥呢?”。 老王一 ...
  • [toc] 一.題目要求 我們在剛開始上課的時候介紹過一個小學四則運算自動生成程式的例子,請實現它,要求: 能夠自動生成四則運算練習題 可以定製題目數量 用戶可以選擇運算符 用戶設置最大數(如十以內、百以內等) 用戶選擇是否有括弧、是否有小數 用戶選擇輸出方式(如輸出到文件、印表機等) 最好能提供圖 ...
  • 剛開始學習php的時候是在wamp環境下開發的,後來才接觸到 lnmp 環境當時安裝lnmp是按照一大長篇文檔一步步的編譯安裝,當時是真不知道是在做什麼啊!腦袋一片空白~~,只知道按照那麼長的一篇文檔一步步的來做就能實現lnmp的搭建。最近工作閑暇之餘又想起來了這個悲慘的事情,然後我就想能不能不看文 ...
  • 書接上文。上文主要講了下線程的基本概念,三種創建線程的方式與區別,還介紹了線程的狀態,線程通知和等待,join等,本篇繼續介紹併發編程的基礎知識。 sleep 當一個執行的線程調用了Thread的sleep方法,調用線程會暫時讓出指定時間的執行權,在這期間不參與CPU的調度,不占用CPU,但是不會釋 ...
  • mq系列文章 對mq瞭解不是很多的,可以看一下下麵兩篇文章: 1. "聊聊mq的使用場景" 2. "聊聊業務系統中投遞消息到mq的幾種方式" 3. 聊聊消息消費的幾種方式 4. 如何確保消息至少消費一次 5. 如何保證消息消費的冪等性 本章內容 從消費者的角度出發,分析一下消息消費的兩種方式: 1. ...
  • day21 03 異常處理 1.什麼是異常 異常:程式運行時發生錯誤的信號 錯誤:語法錯誤(一般是不能處理的異常) 邏輯錯誤(可處理的異常) 特點:程式一旦發生錯誤,就從錯誤的位置停下來,不再繼續執行後面的內容 2.怎麼處理異常呢? 比如下麵類型代碼的異常: 如果執行後用戶輸入的不是數據就會報錯: ...
  • 簡介 Hystrix Dashboard是一款針對Hystrix進行實時監控的工具,通過Hystrix Dashboard可以直觀地看到各Hystrix Command的請求響應時間,請求成功率等數據。 快速上手 工程說明 | 工程名 | 埠 | 作用 | | : | : | : : | | eu ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...