• 1.2模板templates


    一.模板使用

    1. 配置模板目录

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

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

     

    2. 定义模板文件

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

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 </head>
     7 <body>
     8     <!-- 显示模板变量 -->
     9     <h1>{我的名字是:{ name }}</h1>
    10 
    11 </body>
    12 </html>

    3. 模板渲染

    方法一:通过render函数

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

      

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

     1 from django.template import loader
     2 
     3 def index(request):
     4     # 获取模板对象
     5     template = loader.get_template('index.html')  # type: Template
     6     # 渲染得到字符串
     7     data_dict = {'name': 'django' }
     8     html_str = template.render(data_dict)
     9     # 响应请求
    10     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>

  • 相关阅读:
    2020 7 13 每日随笔
    2020 7 10 每日总结
    2020 7 14 每日总结
    2020 7 16 每日总结
    2020 7 15 每日总结
    2020 7 19 每日总结
    2020 7 18 每日总结
    2020 7 17 每日总结
    2020 7 11
    2020 7 12
  • 原文地址:https://www.cnblogs.com/talosant/p/11354516.html
Copyright © 2020-2023  润新知