• Python(Web时代)—— Django的模板


    介绍

    作为一个网络框架,Django 需要一种方便的方式来动态生成 HTML。最常见的方法是依靠模板。一个模板包含了所需 HTML 输出的静态部分,以及一些特殊的语法,描述了如何插入动态内容。目前流行的 Web 框架基本都采用 MVC 的架构,而 Django 在这个架构基础上做了一点改变,即 MTV 框架,这里的 T 就是今天我们要讲的 Django 的模板系统( Template )。

    一个 Django 项目可以配置一个或多个模板引擎(如果你不使用模板,甚至可以不配置模板)。Django 默认内置了一个模板系统 DTL( Django template language ),在一般的项目开发中足够应用了

    Django 模板是使用 Django 模板语言标记的一个文本文档或Python字符串。模板引擎可以识别和解释一些构造。主要是变量和标签。

    模板主要包含两块内容:

    • HTML的静态内容

    • 动态插入的内容(Django 模板语言,简写 DTL,定义在 django.template 包中)

    由 startproject 命令生成的 settings.py 定义关于模板的值:

    • DIRS 定义了一个目录列表,模板引擎按列表顺序搜索这些目录以查找模板源文件。

    • APP_DIRS 告诉模板引擎是否应该在每个已安装的应用中查找模板。

    模板的使用

    Django 模板系统其实是 Python 的一个库,使用模板通过以下两种方法

    • 第一步:通过Template对象,传入一个字符串或者模板的文本文件

    • 第二步:调用Template对象的 render() 方法,然后传入相应的动态变量

    以下我们继续以之前的TestDjango项目下的 score应用为例,进入到score应用的 views.py文件中,修改如下

    方式一:采用字符串模板

    1. # score/views.py
    2. # 导入模板相关库
    3. from django.template import Template, Context
    4. def index(request):
    5. # 定义模板
    6. t = Template('你好

      {{ name }}

      , 这是一个评分系统'
      )
    7. # 定义传入对象
    8. c = Context({'name': '张三'})
    9. # 返回渲染模板

    修改完成后,通过命令 python manage.py runserver 127.0.0.1:8080 启动服务,然后访问该URL:http://127.0.0.1:8080/score/  ,就能看到如下结果

    图片

    方式二:使用模板文件(在应用的目录下创建 templates 目录,程序会自动在该目录下寻找模板。)

    注:添加完方法后,记得在urls.py中加上路径

    a.html 模板文件

    1. "en">
    2. 你好

      "color:red"> {{ name }}

      , 这是一个评分系统

    ​​​​​​

    目录结构

    图片

    方式三:使用模板文件(在项目的根目录下创建 templates 目录,配置 DIRS 值

    第一步:在项目的根目录下创建 templates 目录

    图片

    第二步:修改项目目录下,TestProject/settings.py 配置文件,在配置文件找到 TEMPLATES 对象,并在修改其中 DIRS 的配置路径如下:

    图片

    1. # 注:os 需要先导入才能使用
    2. import os
    3. 'DIRS': [os.path.join(BASE_DIR, 'templates')],     # 修改模板配置路径,

    第三步:修改score下的views.py文件,添加方法,并在urls.py中添加相应路径

    1. def template4(request):
    2. c = {'name': "张三"}
    3. return render(request, 'd.html', c)

    ​​​​​最后访问页面

    图片

    模板的语法

    条件判断语法

    1. {% if 条件 %}
    2. # 满足条件展示内容
    3. {% endif %}
    4. # 或者
    5. {% if 条件1 %}
    6. # 满足条件1展示
    7. {% elif 条件2 %}
    8. # 满足条件2展示
    9. {% else %}
    10. # 不满足条件1条件2的展示
    11. {% endif %}
    12.   # 或者多条件判断
    13. {% if 变量1 and 变量2 %}
    14. {% endif %}
    15. {% if 变量1 or 变量2 %}
    16. {% endif %}

    循环语法

    1. {% for x in xx %}
    2. {% endfor %}

    比较语法

    1. # ifequal/ifnotequal 语法用于更直接的比较两个变量是否相等
    2.  {% ifequal user '张三' %}
    3. {% endifequal %}
    4. # 或者
    5. {% ifnotequal user '张三' %}
    6.  {% endifnotequal %}

    模板过滤器

    过滤器使用管道字符 | 。另外过滤管道可以被套接,即一个过滤器管道的输出又可以作为下一个管道的输入

    {{ 变量 | 过滤器 }}

    示例

    1. # 表示将变量 name 的值变为小写输出
    2. {{ name|lower }}
    3. # 将变量第一个元素转化为大写字母
    4. {{ name|first|upper }}

    模板继承

    模板继承可以减少页面内容的重复定义,实现页面内容的重用。

    典型应用:网站的头部、尾部是一样的,这些内容可以定义在父模板中,子模板不需要重复定义

    示例: 在templates中创建一个 common.html 文件用于复用

    1. "en">
    2. 你好,这是公共部分

    3. {% block mainbody %}
    4. {% endblock %}

    再创建一个 b.html模板文件,继承common.html

    1. "en">
    2. 你好,这是公共部分

    3. {% block mainbody %}
    4. {% endblock %}

    最后修改score应用的views.py文件

    1. # score/views.py
    2. def template3(request):
    3. c = {'name': "张三"}
    4. return render(request, 'b.html', c)

    修改完成,最后通过访问 URL http://127.0.0.1:8080/score/template3 就能看到我们刚修改完的页面

    图片

    注:

    • block 标签:在父模板中预留区域,在子模板中填充

    • extends 标签:在子模板中继承父模板,写在模板文件的第一行

    程序猿与投资生活实录已改名为  程序猿知秋,WX 公众号同款,欢迎关注!! 

  • 相关阅读:
    Android recycleview瀑布流中间穿插一行占满一屏
    【Java八股文总结】之读写分离&分库分表
    1.5 新一代信息技术
    Jenkins Windons下安装ChangeLog插件获取Git更新日志
    深度解析Linux内核—中断
    IDEA插件Mybatis Log Plugin的安装及其使用教程
    C#基础入门教程-基本语法
    ChatGPT:让机器学习与深度学习变得轻松有趣
    flex布局与几个实例(含源码)
    JavaMail连接Office 365使用XOAUTH2身份认证
  • 原文地址:https://blog.csdn.net/qq_25702235/article/details/132801132