关于在html文件中使用模板语言时,一些符号的含义

  {{}}:显示变量相关,在模板渲染的时候替换成值

  {%%}:处理逻辑相关

django模板语言中,对于列表字典等容器类型,不能够通过[ 索引/键值 ]的方式取值。

  可以通过点(.)加索引值的方式来取值:

    i.0  <====> 就是python语法中的 i[0]

    i.name <====> 就是python语法中的 i[ "name" ]

    i.keys <====> 就是python语法中的 i.keys()

    i.items <====> 就是python语法中的 i.items()

  通过点取值的优先级(从高到低排序):

  1. 在字典中查询 ,点后面的名称,会优先从字典的键值中匹配
  2. 属性或者方法, 其次去匹配类的属性或者方法
  3. 数字索引,最后才会去匹配数字索引

   优先匹配到什么就是什么

标签

  1、for循环标签

    {% for i in l %}

      中间做逻辑处理/显示相应的数据

    {% endfor %}

    只要使用到for循环,每个for循环过程中,都有一个共同的属性: forloop

    forloop是一个字典,里面保存的数据如下:

      {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 6, 'revcounter0': 5, 'first': True, 'last': False}

    通过forloop能够获取到for循环执行到某个轮次时的一些数据:

    forloop.counter : 取得当前轮次的序号(从1开始)

    forloop.counter0 :取得当前轮次的序号(从0开始)

    forloop.revcounter : 取得当前轮次的序号(倒序,到1终止)

    forloop.revcounter0 : 取得当前轮次的序号(倒序,到0终止)

    forloop.first : 当前循环是否是第一轮次(布尔值,True or False)

    forloop.last : 当前循环是否是最后一轮次(布尔值,True or False)

    forloop.parentloop :如果当前循环外层还有一个循环,那么就能获取到此时的外层循环的forloop数据;

              如果当前循环没有嵌套循环,那么该值就是空字典

  

  2、{% empty %}

    只能和for循环标签一起用,和if标签一起用报错

    用途:当for循环对象为空时(可能是视图函数传值问题,或者是处理后的值本身为空),显示{% empty %}后的数据

    

    {% for i in l %}
      {{ i }}
     {% empty %}
      无信息
    {% endfor %}

    只有 l 的值为空 : 空字符串、空列表、空字典、空集合等。特殊地,l为None时也能够触发for循环内的empty(亲自测试过,None不是不可迭代的吗...)

    只要l的有一个值,即便是字符串中的空格(" ")、列表中的空字符串[ "" ]等,都不会触发empty显示后续数据。

  3、if判断标签

    {% if  %}

      ...

    {% endif %}

    模板语言中,if支持的逻辑判断:

      not、and、or、==、>、<、>=、<=、!=、in、not in、is、is not

    不支持运算操作,如{% if 2+3 > 1%}。想在判断过程使用运算操作,可以使用filter(过滤器,add)

    不支持连续判断。

    python中的连续判断:   10 > 5 > 2      结果为True

      判断过程为:

          1、 10 > 5 为True

          2、 5 > 2 为True

          3、将两次判断的过程做and运算,即True  and  True,最终结果为True

    模板语言中的连续判断: 10 > 5 > 2  结果为False

      判断过程为:

        1、 10 > 5 为True, 对应的值就是1

        2、  1 > 2 为False,最终结果为False

      和js一样,模板语言是不支持类似python的连续判断机制。

 4、with起别名,为后续使用提供便利

    第一种写法:{%  with obj.name as name %}

    后续需要使用obj.name的话,可以直接用name替代

    {{ name }}  <====>   {{ obj.name }}

    第二种写法:{% with name = obj.name %}

过滤器

  1、基本语法

  {{ 数据 |过滤器:参数}}

  过滤器和参数直接的冒号,左右两边不能有空格!!

  

  2、django内置的一些过滤器

  default:当数据为空时,显示default参数内的值。(数据为布尔值False时,也会触发default过滤器;为True时,正常显示True)

  add:数组加法/减法(将add的值改为负数即可)

      字符串的数字加减,最终也会显示数字。如{{ "4"| add:"2"}}显示6

      还可以做字符串拼接和列表拼接操作。如{{ "ab" | add:"cd"}}显示abcd,{{ [1,2] | add:[3,4]}}显示[1,2,3,4]

      列表拼接,必须是从视图函数中,传值过来的两个列表来做, {{ [1,2] | add:[3,4] }}这种形式无法调用add

  upper/lower/title:字母大写/小写/首字母大写(该过滤器不需要参数)

  length:取得当前数据的长度(不需要参数)

  date:将日期数据格式化显示(格式化模板和python有不同之处)

     {{ value|date:"Y-m-d H:i:s"}}    "Y-m-d H:i:s" 表示年月日时分秒

     python中的字符串格式化为   %Y-%m-%d %H:%M:%S

  过滤器可以连用,如{{ "abc" |upper|lower|title }}最终显示Abc

  更多的内置过滤器用法可以在官方手册中查看

  3、自定义过滤器

    过滤器最多只能有两个参数,第一个参数是当前需要处理的值,第二个参数是处理第一个参数所需要的值

    过滤器可以只有第一个参数(如upper、lower、title)

    自定义过滤器的步骤:

      1、在对应的app下创建一个名为templatetags的python包;

      2、在该包下创建一个python文件,文件名自定义(如mytags);

      3、在该文件中先写上

          from django import template

          register = template.Library()

      4、接着写上自定义的过滤器函数,并为其加上装饰器(@register.filter)

      其中,templatetags和register不能写错!否则django识别不了自定义的过滤器

    自定义过滤器的使用:

      1、在需要用到自定义过滤器的模板文件中,引入自定义过滤器函数所在的python文件

        如{%  load mytags %}

      2、使用过滤器语法,调用过滤器  {{ 待处理数据 | 自定义过滤器:参数 }}

    注意:如果自定义过滤器是在django启动的情况下加入的,需要重启django服务器才能生效。

模板

  1、模板的继承

    {%  extends "模板文件" %}

    模板文件必须用引号包裹,否则会被当成变量处理

    通常,将多个页面都会用到的公共部分放到一个文件中(母版),子文件在继承母版后,如果后续需要修改公共部分的元素,只需修改母版即可。

  2、块

    {%  block 块名 %}

            ......

    {% endblock %}

    每个继承母版的子页面中,不可能每个地方都和母版一致,这就需要在母版中,用block的方式将后续其他页面可能需要修改的地方标记起来;

    在子页面中,只需修改相应的块的内容,就能够实现将母版中对应的内容替换掉。

  3、一般情况下,模板的继承语句放在模板文件的第一行。

    这样的话,子页面中要展示的内容,就必须写在相应的block中,否则无法显示。

    除非,将要展示的内容,放在模板的继承语句之前。

  4、对于css、js需要将其标记在block中,以免子页面在继承母版的时候,继承到不必要的css和js

  5、组件

    {% include "组件名" %}

    把一个页面公用的部分单独写入一个文件,如导航栏。

    然后在需要用到的模板文件中,通过引入语句导入到文件中即可

    组件和母版:

      母版将所有页面共用的部分集合在一起。

      组件将单个公共部分抽离到一个文件,避免有些页面只需要某个单独部分,而不想继承母版的全部的内容。

动态获取静态文件的路径

  在django的settings中,STATIC_URL表示静态资源的引用。

  每个静态文件的路径前必须有STATIC_URL作为前缀。

  如果将静态文件的路径写死,那么后续修改STATIC_URL值的话,需要将每个静态文件的路径修改一遍,极其繁琐。

  所以,可以通过模板语言来动态获取STATIC_URL的值,实现修改该值后,每个静态文件的路径都自动匹配上该值

  动态获取的步骤:

    先引入{%  load static %}

    方式1:<script  src=" {% static  'js/xxx.js' %}"></script>

    方式2:<script  src=" {% get_static_prefix %}js/xxx.js"></script>

django—模板相关的更多相关文章

  1. Django 模板相关

    Django 模板相关 视图函数只是直接返回文本,而在实际生产环境中其实很少这样用,因为实际的页面大多是带有样式的HTML代码,这可以让浏览器渲染出非常漂亮的页面.目前市面上有非常多的模板系统,其中最 ...

  2. Django模板相关

    1.母版 想象一个举着火炬的手,除了火炬这个手还能举棒球棍.举雷神之锤.举拖拉机钥匙等等,举得东西不同给人整体感觉就不同. 母版就相当于这个手(实际为一个html文件),其他相关的html文件就相当于 ...

  3. Django模板语言相关内容

    Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 在Django的模板语言中按此语法使用:{{ 变量名 ...

  4. Django模板语言相关内容 Djan

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

  5. Django——模板语言相关内容

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

  6. Django框架04 /模板相关、别名/反向解析/路由分发

    Django框架04 /模板相关.别名/反向解析/路由分发 目录 Django框架04 /模板相关.别名/反向解析/路由分发 1. 语法 2. 变量/万能的点 3 . 过滤器 4. 标签Tags 5. ...

  7. 6月15日 python学习总结 Django模板语言相关内容

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

  8. django第六天(模板相关,过滤器和标记)

    django第6天 DTL简介 django template language django模板语言 语法: filter{{}} tag{% %} 简单变量的使用 视图函数可以通过两种方式将变量船 ...

  9. django 一些相关问题

    这两天在处理django项目时碰到一些问题 1.ur路径设置要忽略大小写,查找了很多资料,都没有发现相关的介绍,最后在谷歌上找到一个解决方案,https://groups.google.com/for ...

随机推荐

  1. java里的锁总结(synchronized隐式锁、Lock显式锁、volatile、CAS)

    一.介绍 首先, java 的锁分为两类: 第一类是 synchronized 同步关键字,这个关键字属于隐式的锁,是 jvm 层面实现,使用的时候看不见: 第二类是在 jdk5 后增加的 Lock ...

  2. Go 里的函数

    1. 关于函数 函数是基于功能或 逻辑进行封装的可复用的代码结构.将一段功能复杂.很长的一段代码封装成多个代码片段(即函数),有助于提高代码可读性和可维护性. 在 Go 语言中,函数可以分为两种: 带 ...

  3. .NET Core开源导入导出库 Magicodes.IE 2.3发布

    在2.3这一版本的更新中,我们迎来了众多的使用者.贡献者,在这个里程碑中我们也添加并修复了一些功能.对于新特点的功能我将在下面进行详细的描述,当然也欢迎更多的人可以加入进来,再或者也很期待大家来提is ...

  4. jstl中ftm标签用法

    <fmt:formatDate value="${dateTime}" pattern="yyyy/MM/dd HH:mm:ss"/>

  5. GIT学习与GIEE(码云体验)

    GIT 是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件 ...

  6. Burp Suite的安装

    安装均在虚拟机环境下进行. 1.首先在浏览器找到java进行最新版本的安装. 2.然后找到burp suite 的安装包下载 不知道这一次 怎么直接跳过安装打开了.

  7. 适配器(adapter)与fragment之间、fragment与activity之间的通信问题

    一.适配器(adapter)与fragment之间通信 通过本地广播进行通信 步骤如下 在adapter中代码 声明本地广播管理 private LocalBroadcastManager local ...

  8. Ansys Student 2020R2中Fluent编译UDF简介

    使用内建编译器 在Ansys Fluent中编译UDF一般都需要额外安装相应版本的Visual Studio编译器,VS的缺点是体量大,占空间,安装后还需要额外进行相关设置才能正常使用.而新版本的An ...

  9. 在Python中使用OpenCV(CV2)对图像进行边缘检测

    转载:https://blog.csdn.net/cumtb2002/article/details/107798767 Modules used: 使用的模块: For this, we will ...

  10. windows.h系统函数

    转载:https://blog.csdn.net/u010756046/article/details/82432312 // Windows系统函数.cpp: 定义控制台应用程序的入口点.// #i ...