Django框架-04模板層相關

模板語法

{{ }} 變量相關
{%%} 邏輯相關css

ps: 前端獲取後端傳過來的容器類型的內部元素 統一採用句點符(.)html

過濾器: |

default

  • {{ value|default:"nothing"}}

length

  • {{ value|length }}

filesizeformat

  • {{ value|filesizeformat }}

slice

  • {{value|slice:"2:-1"}}

date

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

safe

  • {{ value|safe}}前端

    先後端取消轉義:
    前端:
    |safe
    後端:
    from django.utils.safestring import mark_safe
    zzz = mark_safe('<h1>牀前明月 光</h1>')django

    truncatechars

  • {{ value|truncatechars:9}}後端

truncatewords

  • {{ value|truncatewords:9}}

cut

  • {{ value|cut:' ' }}app

    • 移除value中全部的與給出的變量相同的字符串

join

標籤: {% %}

for循環

{% for foo in d.keys %}
    <p>{{ foo }}</p>
{% endfor %}
{% for foo in d.values %}
    <p>{{ foo }}</p>
{% endfor %}
{% for foo in d.items %}
    <p>{{ foo }}</p>
{% endfor %}

for循環可用的一些參數:函數

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

for ... empty

<ul>
{% for user in user_list %}
    <li>{{ user.name }}</li>
{% empty %}
    <li>空空如也</li>
{% endfor %}
</ul>

if判斷

if,elif和elseoop

{% if user_list %}
  用戶人數:{{ user_list|length }}
{% elif black_list %}
  黑名單數:{{ black_list|length }}
{% else %}
  沒有用戶
{% endif %}

固然也能夠只有if和elsecode

{% if user_list|length > 5 %}
  七座豪華SUV
{% else %}
    黃包車
{% endif %}

ps: if語句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判斷。orm

with取別名

能夠給一個比較複雜的取值操做取一個別名 以後在with語句中 就可使用該別名

{% with l.6.3.name as ttt %}      
    {{ ttt }}    
    {{ l.6.3.name }}
{% endwith %}

csrf_token

這個標籤用於跨站請求僞造保護。

在頁面的form表單裏面寫上 {% csrf_token %}

自定義過濾器

在app位置建立一個 templatetags文件加 裏面放相關的邏輯py文件

from django import template

register=template.Library ()

@register.filter(name="nash") # 自定義過濾器只是帶有一個或兩個參數的Python函數

@register.filter(name="nash") 
def index(a,b):
    print('下午剛起牀 一臉懵逼')
    return a + b

使用自定義過濾器

先導入 格式爲 {{ 操做對象(做爲第一個參數傳入)|名字(可寫==> :另外一個參數) }}

{# 先導入咱們自定義filter那個文件 #}
{% load app01_filters %}

{# 使用咱們自定義的filter,這邊對於的是取的名字 #}
{{ "hello"|nash:"world" }}

自定義標籤

from django import template

register = template.Library ()

@register.simple_tag(name="nash") # 標籤函數能夠可傳多參數

@register.simple_tag(name='apan')
def xxx(a,b,c,year):
    return '%s?%s|%s{%s'%(a,b,c,year)

使用自定義標籤

先導入 格式爲 {% 名字 空格隔開的參數 %}

{# 先導入咱們自定義simple_tag那個文件 #}
{% load app01_simple_tag %}

{# 使用咱們自定義的simple_tag #}
{% apan "9 "22 "11:41" "2019" %}

inclusion_tag

多用於返回html代碼片斷

register = template.Libary ()

@register.inclusion_tag(模版名,name=名字)

使用inclusion_tag

先導入 {% load 名字 %} 格式 {% 函數名 參數 %}

模板的繼承與導入

咱們一般會在母板中定義頁面專用的CSS塊和JS塊,方便子頁面替換。

母版

{% block 給區域起的名字 %}

    {% endblock %}
    
    一般狀況下一個模板中應該至少有三塊
        {% block css %}
            頁面css代碼塊
        {% endblock %}

        {% block js %}
            頁面js代碼塊
        {% endblock %}

        {% block content %}
            頁面主體內容
        {% endblock %}
子板繼承模板
        先繼承模板全部的內容
        {% extends 'home.html' %}
        
        而後根據block塊的名字修改指定區域的內容
        {% block content %}
            <h1>登陸頁面</h1>
                <form action="">
                    <p>username:<input type="text" class="form-control"></p>
                    <p>password:<input type="text" class="form-control"></p>
                    <input type="submit" class="btn btn-success">
                </form>
        {% endblock %}

塊(block)

經過在母板中使用{% block xxx %}來定義"塊"。

在子頁面中經過定義母板中的block名來對應替換母板中相應的內容。

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

組件(模版的導入, 通常都用 inclusion_tag 來代替)

能夠將經常使用的頁面內容如導航條,頁尾信息等組件保存在單獨的文件中,而後在須要使用的地方按以下語法導入便可。

{% include 'navbar.html' %}

靜態文件配置

{% static %}

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

引用JS文件時使用:

{% load static %}
<script src="{% static "mytest.js" %}"></script>
相關文章
相關標籤/搜索