zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    Power of Cryptography
    Radar Installation
    Emag eht htiw Em Pleh
    Help Me with the Game
    89. Gray Code
    87. Scramble String
    86. Partition List
    85. Maximal Rectangle
    84. Largest Rectangle in Histogram
    82. Remove Duplicates from Sorted List II
  • 原文地址:https://www.cnblogs.com/talosant/p/11354516.html
Copyright © 2011-2022 走看看