一.模板使用

1. 配置模板目录

如果命令行创建的项目,需要手动配置模板文件目录,如果是Pycharm创建的项目,则无需配置

  • 在项目根目录下创建模板目录,比如叫 templates,后续开发模板文件会放在此目录下
  • 在项目的配置文件settings.py文件中,进行模板目录的配置,如下:

2. 定义模板文件

 templates目录中新建一个模板文件,如show.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- 显示模板变量 -->
<h1>{我的名字是:{ name }}</h1> </body>
</html>

3. 模板渲染

方法一:通过render函数

 from django.shortcuts import render

 def index(request):
data_dict = {'name': 'django' }
# 参数1:请求对象
# 参数2:模块路径
# 参数3:字典数据
return render(request, 'index.html', data_dict)

  

方法二:通过Template对象的render方法

 from django.template import loader

 def index(request):
# 获取模板对象
template = loader.get_template('index.html') # type: Template
# 渲染得到字符串
data_dict = {'name': 'django' }
html_str = template.render(data_dict)
# 响应请求
return HttpResponse(html_str)

二.模板的语法

  • 模板变量
  • 模板语句
  • 过滤器
  • 注释
  • 模板继承

1. 模板变量

变量名必须由字母、数字、下划线(不能以下划线开头)和点组成,语法如下:

{{ 变量 }}

模板变量可以使python的内建类型,也可以是对象。

2. 模板语句

1)for循环:

{% for item in 列表 %}
{{forloop.counter}} <1-- 表示当前是第几次循环,从1开始 -->
{{forloop.counter0}} <!-- 表示当前是第几次循环,从0开始 -->
{% empty %} 查下
列表为空或不存在时执行此逻辑
{% endfor %}

2)if条件:

{% if ... %}
逻辑1
{% elif ... %}
逻辑2
{% else %}
逻辑3
{% endif %}

比较运算符如下:

==
!=
<
>
<=
>=

布尔运算符如下:

and
or
not

注意:运算符左右两侧必须有空格。

{% if a == 1 %}  # 正确
{% if a==1 %} # 错误

3. 过滤器

语法如下:

  • 使用管道符号|来应用过滤器,用于进行计算、转换操作,可以使用在变量、标签中。
  • 如果过滤器需要参数,则使用冒号:传递参数。

    变量|过滤器:参数     {% if forloop.counter|divisibleby:2 %}
    列举几个如下:
  • safe,禁用html转义(显示html标签样式,而不是字符串){{content|safe}}控制一个
  • {% autoescape off%}  {{content}} {% endautoescape %}  关闭转义  可以控制多个
  • length,长度,返回字符串包含字符的个数,或列表、元组、字典的元素个数。
  • default,默认值,如果变量不存在时则返回默认值。

    data|default:'默认值'
  • date,日期,用于对日期类型的值进行字符串格式化,常用的格式化字符如下:

    • Y表示年,格式为4位,y表示两位的年。
    • m表示月,格式为01,02,12等。
    • d表示日, 格式为01,02等。
    • j表示日,格式为1,2等。
    • H表示时,24进制,h表示12进制的时。
    • i表示分,为0-59。
    • s表示秒,为0-59。
    value|date:"Y年m月j日  H时i分s秒"

4. 注释

1)单行注释语法如下:

{#...#}

2)多行注释使用comment标签,语法如下:

{% comment %}
...
{% endcomment %}

5. 模板继承

  • 模板继承和类的继承含义是一样的
  • 可以使用模板继承来复用父模板,提高代码的复用性,减轻开发人员的工作量。
  • 可以通过定义 block ,实现子模板对父模块内容的重写

父模板

如果发现在多个模板中某些内容相同,那就可以使用block标签把这段内容定义到父模板中。

{% block 块名称 %}
预留区域,可以编写默认内容,也可以没有默认内容
{% endblock %}

子模板

  1. 使用extends标签继承父模板,写在子模板文件的第一行。

     {% extends "父模板路径" %}
  2. 对有需要的block进行重写:

    • 不用重写父模版中的所有block,如果子模版没有重写,则使用父模版定义的默认值。
    • 可以使用 block.super 来包含父模板的块中定义的内容,如下

        {% block 名称 %}
      子模板的内容
      {{ block.super }} 显示父模板中block的内容
      {% endblock %}

django文档参考

<https://docs.djangoproject.com/zh-hans/2.1/ref/templates/builtins/>

django过滤器大全

<https://www.cnblogs.com/Deaseyy/p/10859893.html>

1.2模板templates的更多相关文章

  1. Django学习总结之模板templates

    - django模板: templates - 模板分为两个过程: 1, 加载 : loader.get_template('xxx.html') 返回值是一个template对象 2, 渲染 : t ...

  2. 【Django笔记1】-视图(views)与模板(templates)

    视图(views)与模板(templates) 1,视图(views) ​ 将接收到的数据赋值给模板(渲染),再传递给浏览器.HTML代码可以直接放在views.py(文件名可任意更换),也可以放在t ...

  3. juqery模板 Templates

    现在已经有了许多JavaScript的解决方案模板,从这方面说,标准化的模板解决方案必然是大势所趋.在本节中,我们向你简要描述四个最流行最有趣的模板.现有的模板解决方案能解决什么?那些特色在jQuer ...

  4. Django学习(二)---使用模板Templates

    学会使用渲染模板的方法来显示html内容. 一.Templates是什么: HTML文件 使用了Django模板语言(Django Tamplate Language DTL) 可以使用第三方模板 二 ...

  5. C++模板(Templates)

    模板(template)是泛型编程的基础,"泛型"的含义就是没有不依赖具体的数据类型.模板的引入是为了创建一般性的类(模板类)或者函数(模板函数).典型的容器比如迭代器/算法等是泛 ...

  6. python测试开发django-5.模板templates

    前言 html是一个静态的语言,里面没法传一些动态参数,也就是一个写死的html页面.如果想实现在一个固定的html样式,传入不同的参数,这就可以用django的模板传参来解决. 模板参数 先在hel ...

  7. AS 代码模板 文件模板 Templates MD

    修改 File and Code Templates Settings –> Editor –>[File and Code Templates] 或者在右键new时选择子菜单[Edite ...

  8. django学习-6.模板templates

    1.前言 首先,我们要知道html是一门静态语言,里面没法传一些动态参数,也就是一个写死的html页面. 那么,如果我们想实现在一个html页面里传入不同的参数对应的参数值,这就可以用django框架 ...

  9. 模板templates的使用

    目录 模板及其渲染 模板查找路径 DTL模板语法 常用的模板标签 DTL常用过滤器 模块结构优化 加载静态文件 模板及其渲染 视图函数只是直接返回文本,而在实际生产环境中其实很少这样用,因为实际的页面 ...

随机推荐

  1. div+css 布局技巧总计

    一.css 样式 1.float 首先需要了解块级元素(block element).每个块级元素都默认占用一行,在同一行只能添加一个块元素(float 除外).块级元素一般可以嵌套块级元素或者行内元 ...

  2. cola-ui的使用

    [toc] > 官方:[http://www.cola-ui.com](http://www.cola-ui.com) > > 教程位置:[http://www.cola-ui.co ...

  3. 使用gulp构建微信小程序工作流

    前言 刚入门微信小程序的时候,一切都基于微信web开发者工具,没有使用其他框架,也没有工程化的概念.当时做的项目都比较简单,单单用微信web开发者工具倒也得心应手.学了些东西后,就按捺不住地想跳出原生 ...

  4. 学习4:总结# 1.列表 # 2.元祖 # 3.range

    列表 -- list 有序,可变的,索引, 作用:存储数据的,支持很多种数据类型 定义方式: lst = [1,"alex","黑哥"] 增: append 追 ...

  5. linux下运行python3出现TypeError: a bytes-like object is required, not 'str'

    目标:用python将中文存入csv,且中文正常显示. 环境:linux,python3 百度N久,方法都不行或是比较复杂. 以上代码用python3运行后,出现TypeError: a bytes- ...

  6. [leetcode] 62 Unique Paths (Medium)

    原题链接 字母题 : unique paths Ⅱ 思路: dp[i][j]保存走到第i,j格共有几种走法. 因为只能走→或者↓,所以边界条件dp[0][j]+=dp[0][j-1] 同时容易得出递推 ...

  7. nginx处理302、303和修改response返回的header和网页内容

    背景 遇到一个限制域名的平台,于是使用nginx在做网站转发,其中目标网站在访问过程中使用了多个302.303的返回状态,以便跳转到指定目标(为什么限制,就是防止他的网站的镜像). 在查找了一段资料后 ...

  8. 原生 js基础常用的判断和循环

    原生 js基础常用的判断和循环 以下部分是个人实践及和搜集的资料: 最常用的if判断语句: if (/* 条件表达式 */){ // 成立执行语句 } else { // 否则执行语句 } 原生js的 ...

  9. C#写进程守护程序

    最近写了好多次进程守护程序,今天在这里总结一下. 用到的知识点: 1.在程序中启动进程, 2.写Windows服务, 3.以及在Windows服务中启动带界面的程序 关于第三点的问题,我在我的上一篇博 ...

  10. springboot-权限控制shiro(一)

    1. 场景描述 (1)权限控制是IT项目特别是企业项目,绕不开的重要模块,接下来结合springboot介绍下权限控制框架shiro. (2)springboot集成shiro的东西有点多,一篇博客完 ...