1. 程式人生 > >django 的模板語言template ,自定義過濾器,自定義標簽,模板繼承

django 的模板語言template ,自定義過濾器,自定義標簽,模板繼承

test block src view -- back def 其他 init

後端views文件傳來的字符串和對象,到前端頁面後需要進行渲染,

{{ 變量 }}
{{ 變量| filter:參數 }}
filter可以有很多函數

{#對後端傳來的數據進行渲染,add 就是過濾器,#}
<h1>{{ i|add:10 }}</h1>

{#後端給的數據,前端進行修飾,顯示時間#}
<h3>{{ t|date:"Y-m-d "}}</h3>

{#defult ,如果s是空,default就可以指定一個5,,如果有數據,就顯示數據#}

<h3>{{ s|default:"此處為空"}}</h3>

{#如果後端傳的數據太多,只想顯示一部分,用truncatewords:3 ,截取3個單詞顯示#}

<h3>{{ info|truncatewords:3 }}</h3>

{#{% url %} 別名#}
{#{% with %} {% endwith %}用簡單的變量名,代替復雜額變量名#}


{# 告訴瀏覽器 這個變量時安全的,可以渲染,沒有必要顯示純文本 #}
<h3>{{ a|safe }}</h3
>


=====
template提供的內置過濾器,不夠用,不靈活,就可以自己定義一個過濾器

步驟1:在自己的app裏建一個templatetags包,在包裏創建一個後面要在HTML文件引用的py文件,
步驟2:在py文件中,先導入from django import template
實例化對象register = template.Library()
#創建一個template能認識的函數
對創建的每一個過濾器,都要用加上裝飾器,
步驟3: 在HTML文件中引用{% load mytag %},就可以直接用定義好的過濾器


{#自定義過濾器#}
{#settings文件中自定義filter過濾器,要在自己的APP應用#}
{#中創建一個templategs包,包含有__init__.py 文件#}

過濾器函數只能傳一個參數,
自定義標簽可以寫多個參數

技術分享圖片



-----


技術分享圖片

-----------


技術分享圖片

{#先導入已經用python寫好的過濾器函數,通常寫在最上面,#}
{#要重新啟動項目,加載新創的文件#}
過濾器
{{ i|multi:5 }}


{#自定義標簽simple-tag,可以傳 多個參數#}
自定義標簽
{% multi2 5 3 2 %}

用過濾器寫一個判斷
{% if i|multi:10 > 1 %}
<p>大於</p>
{% else %}
<p>小於</p>

{% endif %}


-------------------------

模板繼承

寫一個都要繼承的模板test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <style>
        .header{
            width:100%;
            height:40px;
            position:fixed;
            background: rebeccapurple;
            top:0;
            left:0;
        }
        .left{
            width:200px;
            top:40px;
            position:fixed;
            bottom:0;
            left:0;
            background-color:royalblue;
        }
{#overflower  防止溢出,可以出現滾動條#}

        .right{
            position:fixed;
            top:40px;
            left:200px;
            right:0;
            bottom:0;
            overflow: auto;
        }

    </style>


</head>
<body>


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

        <div class="item">
            <ul class="title">
                <li><a href="/blog/2017">菜單一</a></li>
                <li><a href="/blog/2016">菜單二</a></li>
                <li><a href="/blog/2015">菜單三</a></li>

            </ul>
        </div>

    </div>
    <div class="right">
        {% block con %}    ---------------------
  
        之間的部分就其他頁面可以直接寫自己的,除此之外的地方都被繼承
        {% endblock %}   ------------------------
    </div>
</div>

</body>
</html>

extends.html 是繼承了test.html 頁面,在block con 之間寫自己的內容即可

{% extends  "test.html"%}




{% block con %}
    <h1>3333</h1>
    <h1>3333</h1>
    <h1>3333</h1>
    <h1>3333</h1>
    <h1>3333</h1>

{% endblock %}




 
 

django 的模板語言template ,自定義過濾器,自定義標簽,模板繼承