最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python全棧之模板渲染詳解

 更新時間:2022年02月15日 09:16:48   作者:熬夜泡枸杞  
這篇文章主要為大家詳細介紹了Python全棧之模板渲染,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1. 標簽

{% 標簽 %}

1.1 for循環(huán)標簽

<ul>
<!-- 可迭代對象都可以用循環(huán) -->
<!-- 循環(huán)列表 -->
    {% for foo in hobby %}
        <li>{{ foo }}</li>
        {% empty %}  <!-- 當循環(huán)的數(shù)據(jù)為空或者沒有這個變量時顯示empty下面的內容 -->
        <h1>啥也沒有</h1>
    {% endfor %}
</ul>

<ul>
    <!-- 循環(huán)字典 -->
    {% for foo in d1 %}  <!-- 只能獲取鍵 -->
        <li>{{ foo }}</li>
    {% endfor %}
    {% for key,value in d1.items %}  <!-- 獲取鍵值對,items.keys,values都能用 -->
        <li>{{ key }} -- {{ value }}</li>
    {% endfor %}

</ul>

forloop對象

<ul>
    {% for foo in hobby %}
		forloop  循環(huán)標簽對象,通過counter屬性可以來記錄循環(huán)次數(shù) 
        <li>{{ forloop.counter }}---{{ foo }}</li> 從1開始計數(shù)
        <li>{{ forloop.counter0 }}---{{ foo }}</li> 從0開始計數(shù)
        <li>{{ forloop.revcounter }}---{{ foo }}</li> 倒序,從1開始計數(shù)
        <li>{{ forloop.revcounter0 }}---{{ foo }}</li> 倒序,從0開始計數(shù)
        <li>{{ forloop.first }}---{{ foo }}</li> 如果是第一次循環(huán),就得到True 
        <li>{{ forloop.last }}---{{ foo }} </li>  如果是最后一次循環(huán),就得到True,其他為False 

    {% endfor %}
</ul>
   
    {% for key,value in hobby2.items %}
        forloop.parentloop 統(tǒng)計外層循環(huán)對象的循環(huán)次數(shù)
        {% for v in value %}
            <li>{{ forloop.parentloop.counter }} -- {{ forloop.counter }} -- {{ v }}</li>
        {% endfor %}

    {% endfor %}
    
reversed 倒序循環(huán)
 <ul>
    {% for foo in hobby reversed %}
        <li>{{ foo }} </li>

    {% endfor %}
</ul>

1.2 if標簽

{% if age > 18 %}
    <h1>太老了</h1>
{% elif age == 18 %}
    <h1>還行</h1>
{% else %}
    <h1>挺嫩</h1>
{% endif %}
{% if age > 18 or number > 100 %} <!-- 符號兩邊必須有空格 -->
    <h1>太老了</h1>
{% elif age == 18 %}
    <h1>還行</h1>
{% else %}
    <h1>挺嫩</h1>
{% endif %}
{% if hobby|length > 3 %} <!-- 可以配合過濾器來使用 -->
    <h1>愛好還挺多</h1>
{% else %}
    <h1>愛好不夠多</h1>
{% endif %}

f語句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判斷,注意條件兩邊都有空格。

注意:不能像下面這樣寫

{% if a > b > c %}
...
{% endif %}

Django的模板語言中屬性的優(yōu)先級大于方法

d2 = {'items': [11,22,33]}
優(yōu)先使用items屬性,不使用items方法,容易導致錯誤
<ul>
    {% for key,v in d2.items %}
        <li>{{ key }} -- {{ v }}</li>
    {% endfor %}
</ul>

1.3 with標簽

給調用過程比較長的數(shù)據(jù)起別名的.

寫法1.
{% with hobby2.xx.0 as kk %}
    <h1>{{ kk }}</h1>
    <h2>{{ kk }}</h2>
{% endwith %}
{% with kk=hobby2.xx.0 %}
    <h1>{{ kk }}</h1>
    <h2>{{ kk }}</h2>
{% endwith %}

1.4 csrf token標簽

<form action="" method="post">
    {% csrf_token %}  <!-- 加上這個標簽之后,post請求就能通過django的csrf認證機制,就不需要注釋settings的配置了 -->
    <input type="text" name="uname">
    <input type="submit">
</form>

2. 模板繼承

先創(chuàng)建一個母版(模板)

比如base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        .c1{
            background-color: pink;
            height: 40px;
        }
        .left-menu{
            background-color: tan;
            width: 200px;
            min-height: 600px;
        }
        .item{
            background-color: yellow;
            height: 40px;
            border-bottom: 1px solid red;
        }
        .left{
            float: left;
        }
        .right{
            float: left;
        }
    </style>
    {% block css %}
    {% endblock %}
</head>
<body>
<div class="nav">
    <div class="c1">
        <a href="">32官網</a>
        <span>性感荷官, 在線發(fā)牌</span>
    </div>
</div>
<div class="main">
    <div class="left">
    <div class="left-menu">
        <div class="menu1 item">
            <a href="/t1/">菜單1</a>  <!-- 寫相對路徑時,前面的斜杠必須寫 -->
        </div>
        <div class="menu2 item">
            <a href="/t2/">菜單2</a>
        </div>
        <div class="menu3 item">
            <a href="/t3/">菜單3</a>
        </div>
    </div>
</div>
<div class="right">
    <div class="content">
        {% block content %}
            <h1>基礎模板</h1>
        {% endblock %}
    </div>
</div>
</div>
</body>
{% block js %}
{% endblock %}
</html>

在模板中預留block塊(叫做 鉤子)

{% block content %}
	<h1>基礎模板</h1>
{% endblock %}

子頁面中繼承模板extends

并重寫模板中預留的block塊中的內容

{{ block.super }}顯示模板的內容

{% extends 'base.html' %}
{% block css %}
    <style>
        .c1{
            background-color: green;
            height: 40px;
        }
    </style>
{% endblock %}
{% block content %}
    <h1>性感美女,在線指導</h1>
    {{ block.super }} <!-- 顯示模板的內容 -->
{% endblock %}

block塊的寫法

{% block content %}
...
{% endblock %}
{% block content %}
...
{% endblock content %}    可以指定endblock的名稱,起到一個提示作用

3. 組件

一個完整功能的模塊,其他頁面如果想使用,就直接以組件的形式引入

比如創(chuàng)建一個zujian.htmlm,內容如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        .c1{
            background-color: pink;
            height: 40px;
        }
    </style>
</head>
<body>

<div class="nav">
    <div class="c1">
        <a href="">32官網</a>
        <span>性感荷官, 在線發(fā)牌</span>
    </div>
</div>
</body>
</html>

在home.html中引入一下include

在頁面什么位置引入,組件效果就生成到什么位置

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<h1>這是home頁面</h1>
{% include 'zujian.html' %}

</body>
</html>

靜態(tài)文件的配置流程

1 在settings.py文件中加上如下配置

STATIC_URL = '/static/'  #別名,映射到STATICFILES_DIRS配置的靜態(tài)文件存放路徑,#那么引入靜態(tài)文件時,我們使用別名路徑來寫,如果使用別名路徑, 那么修改靜態(tài)文件夾名稱之后,也不會影響靜態(tài)文件的返回# STATIC_URL = '/abc/'  別名可以修改的STATICFILES_DIRS = [    os.path.join(BASE_DIR, 'statics'),]STATIC_URL = '/static/'  #別名,映射到STATICFILES_DIRS配置的靜態(tài)文件存放路徑,
#那么引入靜態(tài)文件時,我們使用別名路徑來寫,如果使用別名路徑, 那么修改靜態(tài)文件夾名稱之后,也不會影響靜態(tài)文件的返回
# STATIC_URL = '/abc/'  別名可以修改的
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'statics'),
]

2 在項目根目錄下創(chuàng)建一個文件夾,名稱隨意,比如叫做statics

3 在html文件中引入(兩種方式)

方式1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="/static/css/xx.css"> 方式1   直接寫別名路徑開頭
</head>
<body>
<div class="c1">xxx</div>

</body>
</html>

方式2:

{% load static %}   先load一下static
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="{% static 'css/xx.css' %}" > 方式2

</head>
<body>
<div class="c1">xxx</div>

</body>
</html>

4. 自定義過濾器

1 在應用文件夾中創(chuàng)建一個叫做templatetags的文件夾(注意,名稱必須是它)

2 在templatetags文件夾中創(chuàng)建一個py文件,名稱隨意,比如叫做mytag.py

3 在mytag.py文件中寫如下內容

from django import template
register = template.Library()  #注冊器,變量名稱必須叫register
@register.filter   #過濾器
def xx(v1):  #第一參數(shù)是使用過濾器時,管道符前面的數(shù)據(jù) <h1>{{ name|xx }}</h1>
	return v1 + 'xx'
@register.filter   #過濾器,至多有兩個參數(shù)
def xx2(v1, v2):  #第一參數(shù)是使用過濾器時,管道符前面的數(shù)據(jù) ,第二個參數(shù)是冒號后面的值,<h1>{{ name|xx:'oo' }}</h1>
	return v1 + 'xx2' + v2

4 在html文件中使用

{% load mytag %}   先load一下我們的mytagpy文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<h1>這是home頁面</h1>
{#{% include 'zujian.html' %}#}
<h1>{{ name|xx }}</h1>   #以過濾器的形式使用,這個是一個參數(shù)的
<h1>{{ name|xx2:'oo' }}</h1> # 以過濾器的形式使用,這個是兩個參數(shù)的
</body>
</html>

5. 自定義標簽

1 在應用文件夾中創(chuàng)建一個叫做templatetags的文件夾(注意,名稱必須是它)

2 在templatetags文件夾中創(chuàng)建一個py文件,名稱隨意,比如叫做mytag.py

3 在mytag.py文件中寫如下內容

from django import template
register = template.Library()  #注冊器,變量名稱必須叫register

@register.simple_tag
def tag1(v1, v2 ,v3):  #參數(shù)個數(shù)沒有限制
	return v1 + v2 + v3

4 在html文件中使用

{% load mytag %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>

<h1>{% tag1 11 22 number %}</h1>  <!-- 先寫標簽名稱,然后寫參數(shù),參數(shù)以空格分隔 ,最終得到的tag1的return值 -->
</body>
</html>

6. inclusion_tag 自定義標簽

這個可以模擬不同用戶,所看到的功能模塊不一樣,就是用這個實現(xiàn)的

1 在應用文件夾中創(chuàng)建一個叫做templatetags的文件夾(注意,名稱必須是它)

2 在templatetags文件夾中創(chuàng)建一個py文件,名稱隨意,比如叫做mytag.py

3 在mytag.py文件中寫如下內容

from django import template
register = template.Library()  #注冊器,變量名稱必須叫register
# 通過inclusion_tag來做為裝飾器,并且需要傳入一個參數(shù),這個參數(shù)就是一個html文件(你想做成動態(tài)組件的html文件)
@register.inclusion_tag('zujian2.html')
def dongtai(v1):  #參數(shù)沒有個數(shù)限制
	data = v1  #[11,22,33,44,55,66]
	return {'xx': data }
# zujian2.html會收到定義的inclusion_tag函數(shù)的返回值,然后進行zujian2.html這個動態(tài)組件的模板渲染

zujian2.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        .left-menu {
            background-color: tan;
            width: 200px;
            min-height: 600px;
        }
        .item {
            background-color: yellow;
            height: 40px;
            border-bottom: 1px solid red;
        }
        .left {
            float: left;
        }
    </style>
</head>
<body>
<div class="left">
        <div class="left-menu">
            {% for item in xx %}  <!-- [11,22,33] ,注意 data這是inclusion_tag函數(shù)的返回值那個字典中的鍵 -->
                <div class="menu1 item">
                    <a href="/t1/">{{ item }}</a>  <!-- 寫相對路徑時,前面的斜杠必須寫 -->
                </div>
            {% endfor %}
        </div>
    </div>

</body>
</html>

4 使用inclusion_tag

basic.html

{% load mytag %}   先load
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
{% dongtai menu_list %}  #最終將渲染好的動態(tài)組件(zujian2.html),通過include引入組件的方式,加載到這里
</body>
</html>

5 在后臺視圖中渲染basic.html頁面是可以傳入動態(tài)數(shù)據(jù)

def basic(request):
	# if user.type == 'admin':
	# menu_list = [11,22,33,44,55,66]
	# else:
	menu_list = [22,33]
	return render(request, 'basic.html',{'menu_list': menu_list})

7. 小提示與小練習

小提示

自定義標簽和過濾器在前后端未分離的項目用的比較多一些
前后端分離的項目用的比較少
@register.inclusion_tag('zujian2.html')
def dongtai(v1):
      data = v1
      return {'xx':data}  # 這個return 相當于render(zujian2.html,{'xx':data})

小練習

頁面效果

在這里插入圖片描述

在這里插入圖片描述

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!    

相關文章

  • pandas的空數(shù)據(jù)處理方式

    pandas的空數(shù)據(jù)處理方式

    數(shù)據(jù)清洗是關鍵步驟,尤其是處理空數(shù)據(jù),Pandas提供.isna()識別、.dropna()刪除和填充函數(shù)(如使用平均值、中位數(shù)或眾數(shù))來處理數(shù)據(jù)集中的空值,以提高數(shù)據(jù)分析的準確性,有效的空數(shù)據(jù)處理可以確保數(shù)據(jù)集的完整性和可靠性
    2024-09-09
  • Python中l(wèi)ist循環(huán)遍歷刪除數(shù)據(jù)的正確方法

    Python中l(wèi)ist循環(huán)遍歷刪除數(shù)據(jù)的正確方法

    這篇文章主要給大家介紹了關于Python中l(wèi)ist循環(huán)遍歷刪除數(shù)據(jù)的正確方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • Scrapy基于Python構建強大網絡爬蟲框架實例探究

    Scrapy基于Python構建強大網絡爬蟲框架實例探究

    這篇文章主要為大家介紹了Scrapy基于Python構建強大網絡爬蟲框架實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Python3實現(xiàn)的回文數(shù)判斷及羅馬數(shù)字轉整數(shù)算法示例

    Python3實現(xiàn)的回文數(shù)判斷及羅馬數(shù)字轉整數(shù)算法示例

    這篇文章主要介紹了Python3實現(xiàn)的回文數(shù)判斷及羅馬數(shù)字轉整數(shù)算法,涉及Python數(shù)值運算、轉換等相關操作技巧,需要的朋友可以參考下
    2019-03-03
  • python學習入門細節(jié)知識點

    python學習入門細節(jié)知識點

    我們整理了關于python入門學習的一些細節(jié)知識點,對于學習python的初學者很有用,一起學習下。
    2018-03-03
  • Python中利用ItsDangerous快捷實現(xiàn)數(shù)據(jù)加密

    Python中利用ItsDangerous快捷實現(xiàn)數(shù)據(jù)加密

    這篇文章主要介紹了Python中利用ItsDangerous快捷實現(xiàn)數(shù)據(jù)加密,通過使用Python庫ItsDangerous,我們就可以高效快捷地完成數(shù)據(jù)加密/解密的過程,本文結合實例代碼給大家講解的非常詳細,需要的朋友可以參考下
    2022-11-11
  • 基于Python實現(xiàn)圍棋游戲的示例代碼

    基于Python實現(xiàn)圍棋游戲的示例代碼

    今天給大家?guī)硪黄趪宓脑创a分享。下面我們先看看效果。游戲進去默認為九路玩法,當然也可以選擇十三路或是十九路玩法,感興趣的可以了解一下
    2022-05-05
  • Python全局變量用法實例分析

    Python全局變量用法實例分析

    這篇文章主要介紹了Python全局變量用法,結合實例形式分析了Python中全局變量的定義、使用方法與相關注意事項,需要的朋友可以參考下
    2016-07-07
  • Python遍歷目錄下文件、讀取、千萬條數(shù)據(jù)合并詳情

    Python遍歷目錄下文件、讀取、千萬條數(shù)據(jù)合并詳情

    這篇文章主要介紹了Python遍歷目錄下文件、讀取、千萬條數(shù)據(jù)合并詳情,對文件夾和文件進行屬性判斷,首先對文件夾進行遍歷,看文件夾里有什么樣的文件,讀取出文件夾中的所有文件,下面文章將詳細介紹該內容,需要的小伙伴可以參考一下
    2022-01-01
  • Python?實現(xiàn)驅動AI機器人

    Python?實現(xiàn)驅動AI機器人

    這篇文章主要介紹了Python?實現(xiàn)驅動AI機器人,下文圍繞利用Python?實現(xiàn)驅動AI機器人的相關資料展開內容,需要的小伙伴可以參考一下
    2022-02-02

最新評論

江山市| 嵊州市| 岱山县| 新巴尔虎左旗| 龙陵县| 玛纳斯县| 揭西县| 白山市| 雅安市| 娄底市| 法库县| 社旗县| 加查县| 建平县| 阜南县| 新安县| 桂阳县| 新宁县| 得荣县| 桑植县| 大竹县| 渝中区| 江川县| 无锡市| 虎林市| 武川县| 罗城| 青河县| 咸宁市| 新巴尔虎左旗| 宾川县| 同德县| 曲水县| 连江县| 沁水县| 修文县| 北宁市| 那曲县| 星座| 松滋市| 宝丰县|