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>

原文地址:https://www.cnblogs.com/zmdComeOn/p/12152059.html

时间: 2024-11-06 18:33:12

Django 模板渲染的相关文章

django模板渲染

模板渲染一般有两种方式: 模板文件: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ name }} </body> </html> 方式一:通过render函数 def aaa(request

Django模板渲染之自定义inclusion_tag详细使用

inclusion_tag在使用的时候可以帮我们减少很多前端和后端重复的代码 逻辑图: inclusion_tag的作用是主页面以一定的语法给一个参数,调用某个函数,这个函数可以通过主页面给的参数做一些逻辑处理得到一些数据,将数据渲染到一个小html模块,然后将渲染后的小html模块返回给主页面渲染在调用的位置. 在使用自定义inclusion_tag的时候,我们需要在应用下面新建templatetags文件包,里面必须含有__init__.py文件,另外新建一个任意名称的py文件,里面的固定写

python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器

python3.5 manage.py runserver python Django教程 之模板渲染.循环.条件判断.常用的标签.过滤器 一.Django模板渲染模板 注: 本节代码是基于 Django 1.8,但 Django 1.4 - Djagno 1.9 操作流程也是一样的. 后文给出示例代码可以在 Django 1.4.x 到 Django 1.9.x 上运行. 不过还是强调一点,一点要动手敲代码!不要偷懒哦,动手才能学到真东西. 1. 创建一个 zqxt_tmpl 项目,和一个 名

Django -- 模板

一切伟大的行动和思想,都有一个微不足道的开始:   -- 徐志摩<励志天下> 一切能忍受的微不足道,都有一个行动思想在脚下.   -- 小QQ <励志自己> ------------------------------------------------------------------------------------------------------ 前一节,我们把HTML直接硬编码在python中,尽管他便于解释使徒的工作原理,但是却不是一个好主意: 1.对页面设计进行

Django模板系统详解

你可能已经注意到我们在例子视图中返回文本的方式有点特别.也就是说,HTML被硬性地直接写入 Python代码之中. 这种处理会导致一些问题: § 对页面设计的进行任何改变都必须对 Python代码进行相应的修改.站点设计的修改往往比底层Python代码的修改要频繁得多,因此如果可以在不进行 Python代码修改的情况下变更设计,那将会方便得多. § Python代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给不同的人员(甚至不同部门)来完成.设计人员和 HTML

Django项目实践2 - Django模板

http://blog.csdn.net/pipisorry/article/details/45061511 上篇:Django项目实践1 - 创建Django项目 Django模板 {视图和模板对逻辑和显示进行了分隔} 上面是使用 django.http.HttpResponse() 来输出"Hello World!".该方式将数据与视图混合在一起,不符合Django的MVC思想.或者HTML被直接硬编码在 Python 代码之中. html = "<html>

Django之模板渲染

前言 Django的工作流程 1.客户端发送请求到达 URL2.URL把客户端请求转发给请求函数3.视图函数 使用原生SQL或者ORM去数据库拿到数据 和模板(HTML文件)二者进行渲染(模板+数据)4.return 返回给客户端 在使用WEB框架时 把数据库.程序生成 的数据显示在前端,就需要在后台把此类数据填充进HTML中进而return给用户展示:(这种交融行为....被淫王雅称 模板渲染 ) (模板渲染就 是数据加工,这个工作是在服务端完成后  return给前端的) 一.模板中的特殊标

django路由分配及模板渲染

路由分配及模板渲染 1.路由系统 示例如多台电脑上网:路由器,,,网络上区分某台电脑,依据ip地址端口和网卡的mac地址 web中路由系统是分发请求,,,,web中区分请求,依据url url:全球统一资源定位符(网址) http默认端口:80 https默认端口:443 ?:url中的参数  案例: 路由模式: URLconf模块: urls.py      项目文件夹下的叫根配置文件. path(route,view,kwargs=None,name=Name) route是一个字符串,是u

Django框架04 /模板渲染

1. 语法 关于模板渲染需要记两种特殊符号(语法): {{ }}和{% %} 变量相关的用{{}},逻辑相关的用{%%}. 2. 变量 --- 万能的点 在Django的模板语言中按此语法使用:{{ 变量名 }}. 1.当模版引擎遇到一个变量,它将计算这个变量,然后用结果替换掉它本身. 变量的命名包括任何字母数字以及下划线 ("_")的组合. 变量名称中不能有空格或标点符号. 2.深度查询据点符(.)在模板语言中有特殊的含义.当模版系统遇到点("."),它将以这样的