Django 模板渲染


模板語言

  {{ 變量 }}

  {% 邏輯 %}

 


{{ 變量 }}

{{ 變量 }}中的點號

  用於取出字典/列表等類型數據的值

  {{ list.2 }} 獲取列表list中索引為2的值

  {{ dict.name }} 獲取字典中name的值

{{ 變量 }}內置的過濾器

  以|分隔

  {{ a|safe }}  於django輸出前,要求不對字符進行轉義。自動轉義關閉時自動失效

  {{ time|date:'Y-m-d H:i:s' }}  格式化輸出時間  年月日時分秒

  {{ list|join:',' }}  相當於 ‘,’.join(list)

  {{ str|truncatechars:8 }}  顯示內容為5個字符與3個點號 共8個字符

  {{ str|truncatechars:8 }}  同上 顯示單位為單詞 按空格辨別

  {{ str|length }}  str的長度

  {{ list|slice:'0-2' }}  切片索引0-2不含2

  {{ var|default:'xxx' }}  為var設置默認值為‘xxx’

  {{ str|lower }}{{ str|upper }}  輸出顯示為小/大寫

  {{ int|filesizeformat }}  轉為內存大小單位 類似於2GB 1TB

 

{% 邏輯 %}

  for循環

<ul>
    {% for student_name in name %}
        <li>{{ student_name }}</li>
   {% empty %} //若name為空則於此結束並打印None
   <li>None</li>
{% endfor %} //正常結束for循環
</ul>

 

  if 條件判斷語句

    {% if num > 100 %} //比較運算符兩邊必須留下空格才可以識別
    <p>大於100</p>
    {% elif num == 200 %}
    <p>等於100</p>
    {% else %}
    <p>小於100</p>
    {% endif %}

 

  csrf_token

防御跨站請求偽造,這個標簽用於跨站請求偽造保護

    <form action='/main_h/' method="post">
        {% csrf_token %}  //寫在form表單內
        <input type="text" name="usm">
        <input type="password" name="pwd">
        <input type="submit">
    </form>

裝飾器的形式實現防御跨站請求偽造

from django.views.decorators.csrf import csrf_exempt,csrf_protect
# 於views.py文件中導入
csrf_exempt,csrf_protect
@csrf_protect # 強制放行csrf認證,即便全局配置了csrf認
def main_h(request):
  return render(request,'main_h.html')
@csrf_exempt # 強制進行csrf認證,即便全局沒有配置csrf認證
def dome(request):
  return render(request,'dome.html')

 

 

模板繼承

1 創建一個模板.html文件,
 2 {% extends '模板.html' %}  3 模板.html {% block content %} xxxxxxx{% endblock %} 還可以指定名字{% endblock content%}  4 繼承模板的文件里面 {% block content %} 自己html里面的內容{% endblock %}  5 保留模板內容的寫法 {% block content %} {{ block.super }}自己html里面的內容{% endblock %}

模板
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div{
            float: left;
            width: 20%;
        }
    </style>
</head>
<body>
<h1>Welcome</h1>
{% block head %}
<h1 style="background: antiquewhite">這是模板的大概率應用部分</h1>
{% endblock %}
# 設置可修改內容
<div> <p>標題一</p> <p>標題二</p> <p>標題三</p> </div>
{% block name %} <span>主頁</span> {% endblock %}
# 設置可修改內容
</body> </html>

  繼承

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% extends "main_h.html" %}
# 繼承模板HTML文件
{% block head %} {{ block.super }} {% endblock %}
# 繼承延用內容
{% block name %} 分頁1 {% endblock %}
# 繼承修改內容
</body> </html>

 

組件

將一個完整功能模塊,放到一個hmtl文件中,使用這個模塊的其他頁面,直接在頁面中引入即可, 引入方式{% include '模塊.html' %} ,任意位置引入
ps:(僅引入body內容)

組件HTML
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        h1{
            width: 100%;
            height: 5%;
            background: aqua;
        }
    </style>
</head>
<body>
<h1>這是組件內容</h1>
</body>
</html>

引入組件 {% include 'xxx.html' %}

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

{% include 'h1_h.html' %} //引入組件 ps:(與模板沖突,只會顯示模板而不顯示組件)

</body>
</html>
 

自定義標簽與過濾器

1 app應用文件夾中創建一個叫做templatetags的文件夾
2 創建一個py文件,例如:mytag.py 3 mytag.py,  from django import template  register = template.Library() #register變量必須是這個名字  過濾器:  @register.filter  def xxx(): 參數最多兩個  return 'xxx'  標簽:  @register.simple_tag  def sss(): 參數可以多個  return 'xxx'   標簽:  @register.inclusion_tag('html文件')  def aaa(): 參數可以多個  return {'xx':'xxxxx'}  html文件中的使用 <h1> {# {{ num|xxx:'11,23,33'}}#}  {{ num|xxx:20 }}  {% if num|xxx:20 > 2000 %}  <h2>大於2千</h2>  {% else %}  <h2>小於等於2千</h2>  {% endif %}  </h1>  <h1>  {% sss num 10 15 %} </h1>  <h1>  {% aaa %} </h1>
pydiango1\app01\templatetags\mytag.py文件下
from django import template
from django.utils.safestring import mark_safe
register=template.Library()

@register.simple_tag
def sum_max(a,b,c,d):
    num=a*b*c*d
    return num
# 自定義標簽 可接收多個參數

@register.filter
def num_20(num1,num2):
    num1*=num2
    return num1
# 自定義過濾器 最多接收2個參數

HTML文件下

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{% load mytag %}  //引入mytag.py文件
{% include 'h1_h.html' %} 
{% sum_max 7 8 9 10 %}

<p>{{ num|num_20:2 }}</p>
</body>
</html>

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM