一、母板

1、什么情况下使用母版

当多个页面的大部分内容都一样的时候,我们可以把相同的部分提取出来,放到一个单独的母版HTML文件中
然后在母版中定义需要被替换的block

  1. 例如:母板页面
  2. <!DOCTYPE html>
  3. <html lang="zh-CN">
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta http-equiv="x-ua-compatible" content="IE=edge">
  7. <meta name="viewport" content="width=device-width, initial-scale=1">
  8. <title>母板HTML</title>
  9.  
  10. {% block page-css %}
  11.  
  12. {% endblock %}
  13.  
  14. </head>
  15. <body>
  16.  
  17. <h1>母板内容</h1>
  18.  
  19. {% block page-main %}
  20.  
  21. {% endblock %}
  22.  
  23. <h1>JS</h1>
  24. {% block page-js %}
  25.  
  26. {% endblock %}
  27.  
  28. </body>
  29. </html>

2、在子页面继承母板(相当于把母板所有代码复制过来)

  1. {% extends '母板名.html' %}

3、块(block)

  1. 通过在母板中使用{% block xxx %}来定义"块"
  2. 在子页面中通过定义母板中的block名来对应替换母板中相应的内容
  3. 注意:在母板中block只是定义,里面并没有内容的,子页面才填充内容
  4.  
  5. {% block page-main %}
  6. <p>子页面的内容</p>
  7. {% endblock %}
  8.  
  9. {% block page-js %}
  10. <p>子页面的js</p>
  11. <script src="/static/js/myjs.js"></script>
  12. {% endblock %}
  13.  
  14. {% block page-css %}
  15. <p>子页面的css</p>
  16. <link rel="stylesheet" href="/static/css/mycss.css">
  17. {% endblock %}

二、组件

  1. 1.什么时候用组件?
  2. 页面上相对独立的某个部分可以单独拿出来放到一个单独的html文件中
  3. 2.如何使用
  4. {% include '组件.html' %}

三、静态文件相关

  1. 1、为什么要使用
  2. 把静态文件的路径改成动态拼接的,避免在HTML页面中硬编码静态文件的导入路径
  3.  
  4. 2、如何使用
  5. 先导入static模块:{% load static %}
  6. 两种使用方法:
  7. 1. <link rel="stylesheet" href="{% static 'bootstrap-3.3.7/css/bootstrap.css' %}">
  8.  
  9. 2. <link rel="stylesheet" href="{% get_static_prefix %}font-awesome-4.7.0/css/font-awesome.css">
  10.  
  11. 3、自定义simple_tag
  12. 和自定义filter类似,只不过接收更灵活的参数。
  13. 1. 自定义simple_tag的步骤
  14. 1. app下面新建一个python package名字叫templatetags
  15. 2. 在上一步的python package中新建一个py文件(my_extends.py)
  16. 3. py文件中写一个函数,实现自定义的simple_tag功能
  17. 4. 告诉Django我现在多了一个自定义的tag
  18. 5.例子
  19. from django import template
  20. from django.conf import settings
  21. # 生成一个注册对象
  22. register = template.Library()
  23.  
  24. # 自定义一个拼接静态文件路径的tag函数
  25. @register.simple_tag(name='myst')
  26. def my_static(s):
  27. # 拿到settings.py中的STATIC_URL的值
  28. s1 = settings.STATIC_URL
  29. # 进行字符串拼接
  30. ret = s1 + s
  31. # 返回
  32. return ret
  33.  
  34. 2. 使用自定义的tag
  35. 1. HTML文件中导入刚才创建的py文件
  36. {% load my_extends %}
  37. 2. 重启Django项目
  38. 3. 按照普通的tag调用自定义的函数
  39. <link rel="stylesheet" href="{% myst 'index/index.css' %}">
  40.  
  41. 4、自定义inclusion_tag
  42. 多用于返回html代码片段
  43. 跟上面自定义的步骤一样,只是代码有点不同
  44. inclusion_tag相当于定义了一个局部的HTML,然后别的页面可以引用这段HTML代码
  45. 例如:
  46. my_extends.py
  47.  
  48. @register.inclusion_tag(filename='p.html', name='pp')
  49. def my_p(num):
  50. data = [i for i in range(1, num+1)]
  51. return {'data': data}
  52.  
  53. p.html
  54.  
  55. {% for i in data %}
  56. <span>{{ i }}</span>
  57. {% endfor %}
  58.  
  59. test.html
  60. <!DOCTYPE html>
  61. <html lang="zh-CN">
  62. <head>
  63. <meta http-equiv="content-type" charset="utf-8">
  64. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  65. <meta name="viewport" content="width=device-width, initial-scale=1">
  66. <title>test</title>
  67. </head>
  68.  
  69. <body>
  70.  
  71. {% load my_extend %}
  72. {% pp 10 %}
  73.  
  74. </body>
  75. </html>
  76.  
  77. 解释:
  78. filenameinclusion_tag指定的页面,接收inclusion_tag函数返回值,name是调用时的tags名,
  79. 调用的参数是从my_p接收,返回的内容是filename指定的页面的内容。
  80. 也就是说,上面的代码,最终展示的页面是test.html
  81. {% load my_extend %}
  82. {% pp 10 %}
  83. 上面两句话是导入了my_extend自定义的tags
  84. pptags的具体一个方法,10是参数,pp会把10这个参数传给my_p,然后my_p再传给p.html
  85. 最后在test,html页面显示p.html的那部分代码,相当于把p.html的代码嵌入到了test,html里面展示出来

四、在模板中使用request

如果想在Django模板中使用Request数据,需要先在“settings.py”文件的“TEMPLATES”设置中包含相应的设置

  1. TEMPLATES = [
  2. {
  3. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  4. 'DIRS': [os.path.join(BASE_DIR, 'templates')]
  5. ,
  6. 'APP_DIRS': True,
  7. 'OPTIONS': {
  8. 'context_processors': [
  9. 'django.template.context_processors.debug',
  10. 'django.template.context_processors.request',
  11. 'django.contrib.auth.context_processors.auth',
  12. 'django.contrib.messages.context_processors.messages',
  13. ],
  14. },
  15. },
  16. ]

然后,在模板中我们就可以通过“request.xxx”去获取相应的数据。

比如,session中的数据.

Django模板语言进阶的更多相关文章

  1. Django模板语言初识

    一.Django框架简介 1.MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控 ...

  2. Django模板语言的复用

    一.include标签 由于在项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的,基于这个问题,我们可以采用模板语言复用include标签来帮我们解决,这样就避免 ...

  3. Django模板语言相关内容 Djan

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

  4. Django——模板语言相关内容

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

  5. Django 模板语言 路由 视图

    . 模板语言(字符串替换) . 母版和继承 . 什么时候用母版? html页面有重复的代码,把它们提取出来放到一个单独的html文件. (比如:导航条和左侧菜单) . 子页面如何使用母版? {% ex ...

  6. django模板语言的注释

    就像HTML或者Python,Django模板语言同样提供代码注释. 注释使用 {# #} : ? 1 {# This is a comment #} 注释的内容不会在模板渲染时输出. 用这种语法的注 ...

  7. Django模板语言(常用语法规则)

    Django模板语言 The Django template language 模板中常用的语法规则 {最新版本的Django语法可能有改变,不支持的操作可能支持了.[HTML教程 - 基本元素/标签 ...

  8. Django模板语言与视图(view)

    常用语法 {{  }}和{% %} 变量相关的用{{}} , 逻辑相关的用{% %} 变量 在Django的模板语言中按此语法使用:{{ 变量名 }}. 当模版引擎遇到一个变量,它将计算这个变量,然后 ...

  9. 10:django 模板语言

    Django的模板语言的目的是取得力量和易用性之间的平衡,与其他的模板语言相比,django模板语言显得更简单,更专一, django模板系统由模板,变量,过滤器,标签,注释等主要部分组成 模板 一个 ...

随机推荐

  1. 散列表(has table、哈希表)

    一. 散列表是什么 是包含映射关系的一种数据结构,可以提高查找效率. 二. 散列函数 1)必须是一致的.假设输入一个单词“banana”,映射的数字是1,那么以后每次输入banana都要映射到数字1, ...

  2. asyncio异步IO--同步原语

    asyncio同步原语与线程(threading)模块同步原语基本类似,但有两点重要区别: asyncio同步原语非线程安全,因此不应被用作系统线程同步(可以使用threading代替): async ...

  3. anaconda --包管理和环境管理器

    前言: 以下所有的命令都Win10环境的 Anaconda Prompt 中 环境管理 创建虚拟环境 conda create --name env_name python 也可以指定 Python ...

  4. sql判断字段是否为空

    sql语句条件查询时,有时会判断某个字段是否为空. 字段内容为空有两种情况 1.为null 2.为字符串的空'' 语句如下: select * from table where column is n ...

  5. 自动化测试之路2---python安装

    借鉴这位老哥的文章http://www.cnblogs.com/shabbylee/p/6792555.html

  6. 云数据库PolarDB(一)

    一.出现的背景及PolarDB简介 阿里云,中国第一家拥有完整云计算能力的企业. 2015年,在计算界的奥运会Sort Benchmark中,阿里云计算100TB数据排序只用了不到7分钟,把Apach ...

  7. Django REST framework基础:版本控制

    DRF的版本控制 为什么需要版本控制 API 版本控制允许我们在不同的客户端之间更改行为(同一个接口的不同版本会返回不同的数据). DRF提供了许多不同的版本控制方案. 可能会有一些客户端因为某些原因 ...

  8. 0106笔记--vc2012 打印堆栈

    清空icound 菜单 调试-->选项和设置--->常规--->启用调试助手 要把在未经处理的异常上展开调用堆栈选中: 然后就有

  9. SpringBoot四大神器之auto-configuration

    SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @Confi ...

  10. 在项目中迁移MS SQLServer到Mysql数据库,实现MySQL数据库的快速整合

    在开发项目的时候,往往碰到的不同的需求情况,兼容不同类型的数据库是我们项目以不变应万变的举措之一,在底层能够兼容多种数据库会使得我们开发不同类型的项目得心应手,如果配合快速的框架支持,那更是锦上添花的 ...