丝袜av在线观看|日本美女三级片在线播放|性欧美一区二区三区|小骚热免费国产视频|黑人va在线观看|女同国产91视频|五月丁香色播Av|国产凸凹视频一区二区|伊人电影久久99|国产成人无码一区二区观看

其他輔助標(biāo)簽

一些常用會(huì)用到的內(nèi)置標(biāo)簽。

模板的嵌套引用include

往往制作模板的時(shí)候,我們會(huì)將一些公共部分,比如header、footer、aside等部分,抽離出來(lái)獨(dú)立存放,不需要在每一個(gè)頁(yè)面都重復(fù)編寫(xiě),只需要在每一個(gè)頁(yè)面引入它們即可。這個(gè)時(shí)候,我們可以使用include標(biāo)簽。

{% include "partial/header.html" %}
{% include "partial/footer.html" %}

include可以將一個(gè)拆分出來(lái)的代碼片段(fragment)嵌入到完整的文檔中。使用形式是{% include "模板文件" %}

如果需要引入的模板不存在的話(huà),它會(huì)報(bào)錯(cuò),如我我們不知道引入的模板是否存在,則需要增加if_exists判斷。

{% include "partial/header.html" if_exists %}

這樣如果header.html模板存在的話(huà),則會(huì)引入,即使不存在,也不會(huì)報(bào)錯(cuò),只是被忽略掉了。

默認(rèn)情況下,include引入的模板,它會(huì)繼承當(dāng)前模板的所有變量,如果想給include引入的模板增加另外的變量,可以使用with來(lái)增加。如:

{% include "partial/header.html" with title="這是聲明給header使用的title" %}

這樣就給include引入的模板定義了title變量,當(dāng)前模板的其他變量它同樣也可以繼續(xù)使用了。

如果需要聲明多個(gè)變量給include引入的模板使用,可以連續(xù)使用key=value的形式增加,它們之間使用空格隔開(kāi),如:

{% include "partial/header.html" with title="這是聲明給header使用的title" keywords="這是聲明給header使用的keywords" %}

如果只想讓include引入的模板使用指定的幾個(gè)變量,而不是當(dāng)前模板的所有變量,可以使用only來(lái)做限制:

{% include "partial/header.html" with title="這是聲明給header使用的title" keywords="這是聲明給header使用的keywords" only %}

然后在header.html中使用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{title}}</title>
    <meta name="keywords" content="{{keywords}}">
</head>

模板代碼片段宏函數(shù)macro

iris.Django模板引擎可以很簡(jiǎn)便的定義一些宏函數(shù)代碼片段。宏代碼片段相當(dāng)于一個(gè)函數(shù),它只能調(diào)用從參數(shù)傳入的變量。類(lèi)似于使用include。不過(guò)macro有限定的作用域。如文章我們給文章列表的文章item使用macro

定義一個(gè)宏函數(shù)
{% macro archive_detail(archive) %}
<li class="item">
    <a href="/archive/{{archive.Id}}" class="link">
        <h5 class="title">{{archive.Title}}</h5>
    </a>
</li>
{% endmacro %}
使用定義的宏函數(shù)
{% for item in archives %}
    {{ archive_detail(item) }}
{% endfor %}

同時(shí)宏函數(shù)還可以保存到獨(dú)立的文件中,然后通過(guò)import來(lái)嵌套進(jìn)來(lái)。當(dāng)一個(gè)文件中包含多個(gè)宏函數(shù),可以使用,將隔開(kāi)連續(xù)引入多個(gè)宏函數(shù)。還可以使用as來(lái)設(shè)置別名:

保存宏函數(shù)到 archive.helper

{% macro archive_detail(archive) %}
<li class="item">
    <a href="/archive/{{archive.Id}}" class="link">
        <h5 class="title">{{archive.Title}}</h5>
    </a>
</li>
{% endmacro %}
{% macro archive_detail2(archive) %}
<li class="item">
    <a href="/archive/{{archive.Id}}" class="link">
        <h5 class="title">{{archive.Title}}</h5>
    </a>
</li>
{% endmacro %}

index.html中引入:

用import引入:
{% import "archive.helper" archive_detail, archive_detail2 as archive_detail_new, archive_detail as new_item %}
調(diào)用:
{% for item in archives %}
    {{ archive_detail(item) }}
    {{ archive_detail_new(item) }}
    {{ new_item(item) }}
{% endfor %}

模板的繼承 extends

模板的繼承有點(diǎn)像ppt中的母版一樣,我們定義好一個(gè)骨架,將一個(gè)頁(yè)面都寫(xiě)好,大部分不用變動(dòng),需要變動(dòng)的部分使用block標(biāo)簽包裹起來(lái):

{% block title %}
    <title>base</title>  <!-- 如果擴(kuò)寫(xiě)了就是擴(kuò)寫(xiě)的,不擴(kuò)寫(xiě)就還是用base -->
{% endblock %}

這樣定義的好處是,可以在繼承它的模板中,重寫(xiě)這個(gè)block,不重寫(xiě)就按母版來(lái)顯示。

比如我們定義了一個(gè)base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    {% block title %}
        <title>base</title>  <!-- 如果擴(kuò)寫(xiě)了就是擴(kuò)寫(xiě)的,不擴(kuò)寫(xiě)就還是用base -->
    {% endblock %}
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
          integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .header {
            width: 100%;
            height: 50px;
            background-color: #369;
        }
    </style>
</head>
<body>

<div class="header"></div>

<div class="container">
    <div class="row">
        <div class="col-md-3">
            {% include 'aside.html' %}
        </div>
        <div class="col-md-9">
            {% block content %}
                <h4>content</h4>
            {% endblock %}
        </div>
    </div>
</div>
</body>
</html>

然后在index.html中繼承這個(gè)base.html

{% extends 'base.html' %}

{% block title %}
    <title>index</title>
{% endblock %}


{% block content %}
    <div class="col-md-9">
        <h3>index</h3>
        <p>index content</p>
    </div>

{% endblock %}

這樣就是使用base.html作為母版,并在index.html 中重寫(xiě)了title、content兩個(gè)部分。

注意:如果你在模版中使用{% extends %}標(biāo)簽,它必須是模版中的第一個(gè)標(biāo)簽。其他的任何情況下,模版繼承都將無(wú)法工作。

在使用繼承的情況下,盡可能將可能會(huì)變動(dòng)的數(shù)據(jù),都包裹在block中,因?yàn)閎lock即使在后續(xù)的頁(yè)面不重寫(xiě),也不影響模板的解析,而需要重寫(xiě)的時(shí)候就更方便。

同樣地,如果后續(xù)寫(xiě)到某一塊,發(fā)現(xiàn)多個(gè)頁(yè)面都需要使用到,那么這時(shí)候,就把添加到base.html中去,讓它成為母版的一部分。

變量的輸出

Django 模板中遍歷復(fù)雜數(shù)據(jù)結(jié)構(gòu)的關(guān)鍵是句點(diǎn)字符.,變量輸出邊界定義是雙大括號(hào)。有一個(gè)對(duì)象是people,它有Name、Gender、Level屬性,在模板中輸出就是:

<ul>
  <li>網(wǎng)站:{{siteName}}</li>
  <li>名字:{{people.Name}}</li>
  <li>性別:{{people.Gender}}</li>
  <li>等級(jí):{{people.Level}}</li>
</ul>

在模板中使用struct結(jié)構(gòu)體內(nèi)置方法

比如在archive列表中,archive的結(jié)構(gòu)體中,定義了內(nèi)置函數(shù)func (archive *Archive) GetThumb(),那么在模板中,是可以直接調(diào)用的。如:

{% for item in archives %}
<li class="item">
    <a href="/archive/{{item.Id}}" class="link">
        <img src="{{item.GetThumb()}}" alt="{{item.Title}}" />
        <h5 class="title">{{item.Title}}</h5>
    </a>
</li>
{% endfor %}

模板可以直接使用{{item.GetThumb()}}來(lái)調(diào)用內(nèi)置的archive.GetThumb()方法。

在模板中輸出當(dāng)前時(shí)間

now標(biāo)簽提供在模板中輸出當(dāng)前時(shí)間。now格式化時(shí)間的參數(shù)遵循golang的時(shí)間格式化規(guī)則。如果增加fake 參數(shù),則會(huì)輸出一個(gè)特定的加時(shí)間代替當(dāng)前時(shí)間。如:

{% now "Mon Jan 2 15:04:05 -0700 MST 2006" fake %}
{% now "2006-01-02 15:04" %}

lorem 隨機(jī)生成拉丁文樣本數(shù)據(jù)

顯示隨機(jī)的“ lorem ipsum”拉丁文本。 這對(duì)于在模板中提供樣本數(shù)據(jù)很有用。也就是占位內(nèi)容。在開(kāi)發(fā)模板沒(méi)有真實(shí)數(shù)據(jù)的時(shí)候,使用這個(gè)標(biāo)簽可以快速填充足夠多的隨機(jī)數(shù)據(jù)。如:

-----
{% lorem %}
-----
{% lorem 10 %}
-----
{% lorem 3 p %}
-----
{% lorem 100 w %}
-----

模板的注釋

iris.Django的注釋我們使用大括號(hào)+#來(lái)實(shí)現(xiàn)注釋?zhuān)?code>{# 注釋內(nèi)容 #}

單行注釋使用 {# 這只能注釋單行 #},多行注釋使用 {% comment %}這里注釋很多行{% endcomment %}。

示例:

空單行注釋

{# #}

單行注釋

{# testing single line comment #}

用有效標(biāo)簽填充單行注釋

{# testing single line comment {% if thing %}{% endif %} #}

用無(wú)效標(biāo)簽填充單行注釋

{# testing single line comment {% if thing %} #}

用無(wú)效語(yǔ)法填充單行注釋

{# testing single line comment {% if thing('') %}wow{% endif %} #}

空塊注釋

{% comment %}{% endcomment %}

填充文本單行塊注釋

{% comment %}filled block comment {% endcomment %}

空多行塊注釋

{% comment %}


{% endcomment %}

阻止帶有其他標(biāo)簽的注釋

{% comment %}
  {{ thing_goes_here }}
  {% if stuff %}do stuff{% endif %}
{% endcomment %}

阻止其中帶有無(wú)效標(biāo)簽的注釋

{% comment %}
  {% if thing %}
{% endcomment %}

使用無(wú)效語(yǔ)法阻止注釋

{% comment %}
  {% thing('') %}
{% endcomment %}

注釋之間的常規(guī)標(biāo)簽,以確保其在詞法分析器中不會(huì)中斷

{% if hello %}
{% endif %}
after if
{% comment %}All done{% endcomment %}
問(wèn)題反饋可加技術(shù)微信:tsrz001
目錄