关于在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. 移动端 取消0.3ms的延迟 两种方案解决

    在index.html中添加一下代码 <script src="https://as.alipayobjects.com/g/component/fastclick/1.0.6/fas ...

  2. 《k8s权威指南》读书笔记

    抽空读完了<k8s权威指南>一书,对k8s的总算有了较为系统的认知. 好记忆不如多写字,以下是读书笔记 第一章 k8s入门 k8s是什么: 一个开源的容器集群管理平台,可提供容器集群的自动 ...

  3. matlab数字图像处理-给图片加入可视水印信息

    将文件夹路径改成了我想要存放代码的文件夹下 然后也是在网上百度,找到了一个代码,敲着模仿了一个 自己建立了一个脚本文件 >>edit test1 然后在脚本中添加 %读取待嵌入水印的图像和 ...

  4. Burger King使用RayOnSpark进行基于实时情景特征的快餐食品推荐

    作者:Luyang Wang, Kai Huang, Jiao Wang, Shengsheng Huang, Jason Dai 基于深度学习的推荐模型已广泛应用于各种电商平台中,为用户提供推荐.目 ...

  5. Pycharm永久激活2且jetbrains全系列产品

    Pycharm永久激活2 注意:本教程补丁来源于https://zhile.io,如有侵权请联系作者删除! 本项目只做学习研究之用,不得用于商业用途! 一.激活前注意事项 PyCharm尽量在官网下载 ...

  6. 【JAVA】HashMap源码阅读

    目录 1.关键的几个static参数 2.内部类定义Node节点 3.成员变量 4.静态方法 5.HashMap的四个构造方法 6.put方法 7.扩容resize方法 8.get方法 9.remov ...

  7. subDomainsBrute安装(windows系统)

    step1:  安装python2.7(省略) step2:  下载subDomainsBrute 地址: https://github.com/lijiejie/subDomainsBrute 下载 ...

  8. IntelliJ IDEA 2020.2 x64 最新破解教程有效期到2089年 完全免费分享

    作者:极客小俊 一个专注于web技术的80后 我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人! CSDN@极客小俊,原创文章, B站技术分享 B站视频 : Bilibili.com 个 ...

  9. 分享一些比较好用的(免费)网站及推荐理由 SMARK

    分享一些比较好用的(免费)网站及推荐理由 --By SMARK 资源类 这里面是一些有供下载的资源的网站等 视频 片库 内容怎么样有待考证 蓝光网 看着还行, 打赏收入 预告片世界 还行, 收入有待考 ...

  10. 037 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 04 switch结构

    037 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 04 switch结构 本文知识点:Java中的switch结构 选择结构分类 选择结构只有如下2种 ...