Django框架详细介绍---模板系统

Django模板系统

  官方文档:

https://docs.djangoproject.com/en/2.0/ref/templates/builtins/#std:templatetag-for

1.常见语法

  两种页数符号

{{}}
{% %}

  1)变量

  变量名由字母、数字、下划线组成;模板语言中用点“.”来获取相应的属性

{{变量名}}

  模板支持的写法:

{# 取列表中的的第x个参数 #}
{{ 列表.x }}

{# 取字典中key的值 #}
{{ 字典.key }}

{# 取对象的属性和不带参数的方法 #}
{{ 对象.属性 }}
{{ 对象.方法 }}

示例:

def test(request):
    class Info(object):
        def __init__(self, name, pwd):
            self.name = name
            self.pwd = pwd

        def show_info(self):
            return "用户名:{},密码:{}".format(self.name, self.pwd)

    info = Info(‘ch‘, ‘123‘)
    name = ‘zhzh‘
    list_re = [‘zhang‘, ‘123‘]
    dic_re = {‘name‘: ‘zh‘, ‘pwd‘: ‘321‘}

    import datetime
    date = datetime.datetime.today()

    return render(request, ‘test.html‘, {
        ‘name‘: name,
        ‘dic‘: dic_re,
        ‘list‘: list_re,
        ‘obj‘: info,
        ‘date‘: date,
        ‘message‘: ‘‘‘
再没听到你
对我说你最爱的故事
我想了很久
我开始慌了
是不是我又做错了什么
你哭着对我说
童话里都是骗人的
我不可能是你的王子
也许你不会懂
从你说爱我以后
我的天空星星都亮了
我愿变成童话里
你爱的那个天使
张开双手变成翅膀守护你
你要相信
相信我们会像童话故事里
幸福和快乐是结局
一起写我们的结局
你哭着对我说
童话里都是骗人的
我不可能是你的王子
也许你不会懂
从你说爱我以后
我的天空星星都亮了
我愿变成童话里
你爱的那个天使
张开双手变成翅膀守护你
你要相信
相信我们会像童话故事里
幸福和快乐是结局
我要变成童话里
你爱的那个天使
张开双手变成翅膀守护你
你要相信
相信我们会像童话故事里
幸福和快乐是结局
我会变成童话里
你爱的那个天使
张开双手变成翅膀守护你
你要相信
相信我们会像童话故事里
幸福和快乐是结局
一起写我们的结局
        ‘‘‘
    })

视图

<div class="container">
    <div class="row col-sm4 col-sm-offset-3">
        <div class="col-sm-6">
            <hr>
            变量
            <br>
            {{ name }}
            <hr>
            字典,按key取值
            <br>
            {{ dic.name }},{{ dic.pwd }}
            <hr>
            列表,按索引取值,字典后面调用方法求长度
            <br>
            {{ list.0 }},{{ list.1 }},{{ list|length }}
            <hr>
            对象,通过点.访问对象的属性和方法
            <br>
            {{ obj.name }},{{ obj.pwd }},{{ obj.show_info }}
            <hr>
            字符串显示,设置当字符串超出多少个字符之后以省略号的形式显示
            <br>
            {{ message|truncatechars:200 }}
            <hr>
            时间对象,格式化时间显示
            <br>
            {{ date|date:"Y-m-d H:i:s" }}
            <hr >
            字符串显示和防止xml注入,加入safe参数可执行字符串中的脚本
            <br>
            {{ str|safe }}
        </div>
    </div>
</div>

示例代码

  2)Filters

  基本语法

{{ value|filter_name:参数 }}

  default,默认值

{{ value|default: "nothing"}}

注意:

  如果value没有值传则显示nothing

  length,求长度,如求列表的长度

{{ value|length }}

  filesizeformat,将值格式化成一个‘人可读的’文件尺寸

{{ value|filesizeformat }}

  slice,切片,顾头不顾尾

{{value|slice:"首:尾"}}

  date,格式化

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

  safe

  Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候可能不希望这些HTML元素被转义,比如做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义

{{ str|safe }}

  truncatechars,如果字符串字符个数超出了指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾

{{ message|truncatechars:200 }}

  自定义filter,只带一个或两个参数的Python函数

变量(输入)的值 - -不一定是一个字符串
参数的值 - 这可以有一个默认值,或完全省略
例如:  在过滤器{{var | foo:“bar”}}中,过滤器foo将传递变量var和参数“bar”

  步骤:

    I)在建立的APP内新建一个 templatetags 包(python package)

    II)在新建的包内新建一个py文件

    III)py文件内定义实现具体功能的函数,按照固定的写法将其注册到Django的模板语言中

    IV)重启Django服务

    V)在HTML中调用

      导入新建的py文件,在调用相关的filter函数

  自定义simpletag,与自定义filter类似,只不过接收更灵活的参数

注册和定义:
@register.simple_tag(name="plus")
def plus(a, b, c):
    return "{} + {} + {}".format(a, b, c)

导入使用:
{% load py文件 %}

{% plus "1" "2" "abc" %}

  inclusion_tag,多用于返回HTML代码

示例:

from django import template

# 生成一个用于注册自定义的filter方法的实例
register = template.Library()

@register.filter(name=‘str_sum‘)
def str_sum(str_1, str_2):
    return "{} {}".format(str_1, str_2)

@register.inclusion_tag(‘ul.html‘, name=‘wapper‘)
def my_menu(arg):
    ret = ["第{}项".format(i) for i in range(arg)]
    return {‘data‘: ret}

自定义filter函数

<div class="col-sm-6">
    {% load filter_test %}
    <hr>
    {#调用filter内定义的函数#}
    {{ name|str_sum:"vary happy" }}

    <hr>
    注册方法:@register.inclusion_tag(‘ul.html‘,name=‘wapper‘)
    <br>
    调用 和 传参数
    {% wapper 10 %}
</div>

调用自定义filter

<ul>
    {% for i in data %}
        <li>{{ i }}</li>
    {% endfor %}
</ul>

ul.html

  3)Tags

  for循环

示例:循环列表

{% for user in user_list %}
    <li>{{ user.name }}</li>
{% endfor %}
</ul>

  for循环相关参数

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,elif 和 else条件语句

{% if a %}
     <div>满足条件一执行</div>
{% elif b %}
     <div>满足条件二执行</div>
{% else %}
     <div>不满足前面的条件执行</div>
{% endif %}
{% if a %}
     <div>满足条件执行</div>
{% else %}
     <div>不满足条件执行</div>
{% endif %} 

  with,定义中间变量

{% with total=business.employees.count %}
    {{ total }} employee{{ total|pluralize }}
{% endwith %}

  csrf_token,跨站请求伪造保护

在页面的form表单里面写上{% csrf_token %}

补充:   

  1)if 判断支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断,但是Django中不支持连续判断,例如:不支持if a>b>c等写法

  2)Django模板语言中属性的优先级大于方法

2.母板

  继承母板,在子页面中页面最上方导入母板

{% extends ‘母版HTML文件‘ %}

  块,通过在母板中定义块,在子页面中通过定义母板中的block名来替换模板中相应的内容

{% block page-test %}
  HTMl代码  
{% endblock %}

  组件,将常用的页面内容保存在单独的文件中如导航条、页尾信息,然后在需要使用的地方导入

{% include ‘组件HTML文件‘ %}

  静态文件相关

{% load static %}
<img src="{% static "images/pic.jpg" %}" alt="图片加载失败" />

  引用JS文件,以及当在多个地方被引用是可起别名,相当于保存为一个变量

{% load static %}
{% static "images/pic.jpg" as mytest %}
<img src="{{ mytest }}"></img>

  使用get_static_prefix

{% load static %}
<img src="{% get_static_prefix %}images/pic.jpg" alt="图片加载失败" />

  或者起别名

{% load static %}
{% get_static_prefix as STATIC_PREFIX %}

<img src="{{ STATIC_PREFIX }}images/pic.jpg" alt="图片加载失败" />

原文地址:https://www.cnblogs.com/mdzzbojo/p/9194276.html

时间: 2024-11-06 20:03:34

Django框架详细介绍---模板系统的相关文章

Django框架详细介绍

Django视图系统 1.什么是视图 在Django中,一个视图函数/类,称为视图.实质就是一个用户自定义的简单函数,用来接收WEB请求并xing响应请求,响应的内容可以是一个HTML文件.重定向.一个文件.照片等.无论视图本身包含什么逻辑,都要返回响应. 一般的,视图函数一般存放于用户创建的APP目录下的views.py中. 2.视图种类 1)FBV FBV(function base views),全称基于函数的视图,也就是在视图中使用函数处理请求, 函数内部再定义如何处理GET.POST等

Django框架详细介绍---ORM相关操作---select_related和prefetch_related函数对 QuerySet 查询的优化

Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化 引言 在数据库存在外键的其情况下,使用select_related()和prefetch_related()很大程度上减少对数据库的请求次数以提高性能 1.实例准备 模型: from django.db import models # Create your models here. # 书 class Book(models.Model): title = models.C

Django框架详细介绍---request对象

几个重要的函数 1.HttpRequest.get_host() 根据从HTTP_X_FORWARDED_HOST(如果打开 USE_X_FORWARDED_HOST,默认为False和 HTTP_HOST 头部信息返回请求的原始主机.如果这两个头部没有提供相应的值,则使用SERVER_NAME 和SERVER_PORT,在PEP 3333 中有详细描述 USE_X_FORWARDED_HOST是一个布尔值,用于指定是否优先使用 X-Forwarded-Host 首部,仅在代理设置了该首部的情况

Django框架详细介绍---AJAX

一.概述 1.什么是JSON JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * JSON 具有自我描述性,更易理解 JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台,JSON 解析器和 JSON 库支持许多不同的编程语言 图示:JavaScript与Python间JSON支持的数据类型以及相应转换关系 示例: 真确的Json对象

Django - Django框架 简单介绍

Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码的Web应用框架, 由Python写成. 採用了MVC的软件设计模式, 即模型M, 视图V和控制器C. 它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的站点的, 并于2005年7月在BSD许可证下公布. 这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的.

django框架基本介绍

一.mvc和mtv 1.mvc介绍 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller),具有耦合性低.重用性高.生命周期成本低等优点. 想要更详细的了解MVC模式? >> 点我 Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性. Django框架的不同之处在于它拆分的三部分为:Model(模型).Template(模

Django框架简介及模板Template

Django框架简介 MVC框架和MTV框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller),具有耦合性低.重用性高.生命周期成本低等优点. 想要更详细的了解MVC模式? >> 点我 Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性. Django框架的不同之处在于它拆分的三部分为:Model(模型).Templ

Django学习系列之模板系统

一.模板标签 if/else {%  if  %}标签检查一个变量的值是否为真或者等于另外一个值,如果为真,系统会执行{%  if  %}和{%  endif  %}之间的代码块,例如: {% if today_is_weekend %} <p>Welcome to the weekend!</p> {% endif %} {%  else  %}标签是可选的,如果不为真则执行{%  else  %}和{%  endif  %}之间的代码块 注意:一定要用{%  endif  %}

人生苦短,我用python-- Day19 django框架之URL路由系统、视图应用、模板应用、django之orm应用

目录 一.django的URL应用 二.django的视图应用 三.django的模板应用 四.django的orm应用 补充: 补充一:getlis 应用场景:当前端发送的数据为多个的时候,后台如果还用get获取数据,那么就会出问题,所以这里有一个getlist方法进行数据的获取. 试验案例:当前端有一个多选的checkbox的时候,那么就要使用getlist进行获取数据了 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^get