欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Django 模板渲染

程序员文章站 2023-03-26 20:21:45
模板语言 {{ 变量 }} {% 逻辑 %} {{ 变量 }} {{ 变量 }}中的点号 用于取出字典/列表等类型数据的值 {{ list.2 }} 获取列表list中索引为2的值 {{ dict.name }} 获取字典中name的值 {{ 变量 }}内置的过滤器 以|分隔 {{ a|safe } ......

模板语言

  {{ 变量 }}

  {% 逻辑 %}

 


{{ 变量 }}

{{ 变量 }}中的点号

  用于取出字典/列表等类型数据的值

  {{ 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循环

Django 模板渲染
<ul>
    {% for student_name in name %}
        <li>{{ student_name }}</li>
   {% empty %} //若name为空则于此结束并打印none
   <li>none</li>
{% endfor %} //正常结束for循环
</ul>
Django 模板渲染

 

  if 条件判断语句

Django 模板渲染
    {% if num > 100 %} //比较运算符两边必须留下空格才可以识别
    <p>大于100</p>
    {% elif num == 200 %}
    <p>等于100</p>
    {% else %}
    <p>小于100</p>
    {% endif %}
Django 模板渲染

 

  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>

装饰器的形式实现防御跨站请求伪造

Django 模板渲染
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')
Django 模板渲染

 

 

模板继承

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 %}

模板
Django 模板渲染
<!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>
Django 模板渲染

  继承

Django 模板渲染
<!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>
Django 模板渲染

 

组件

将一个完整功能模块,放到一个hmtl文件中,使用这个模块的其他页面,直接在页面中引入即可,
引入方式{% include '模块.html' %} ,任意位置引入
ps:(仅引入body内容)

组件html
Django 模板渲染
<!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>
Django 模板渲染

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

Django 模板渲染
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>title</title>
</head>
<body>

{% include 'h1_h.html' %} //引入组件 ps:(与模板冲突,只会显示模板而不显示组件)

</body>
</html>
Django 模板渲染
 

自定义标签与过滤器

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文件下
Django 模板渲染
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个参数
Django 模板渲染

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>