一、母板

1、什么情况下使用母版

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

例如:母板页面
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>母板HTML</title> {% block page-css %} {% endblock %} </head>
<body> <h1>母板内容</h1> {% block page-main %} {% endblock %} <h1>JS</h1>
{% block page-js %} {% endblock %} </body>
</html>

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

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

3、块(block)

通过在母板中使用{% block  xxx %}来定义"块"。
在子页面中通过定义母板中的block名来对应替换母板中相应的内容
注意:在母板中block只是定义,里面并没有内容的,子页面才填充内容 {% block page-main %}
<p>子页面的内容</p>
{% endblock %} {% block page-js %}
<p>子页面的js</p>
<script src="/static/js/myjs.js"></script>
{% endblock %} {% block page-css %}
<p>子页面的css</p>
<link rel="stylesheet" href="/static/css/mycss.css">
{% endblock %}

二、组件

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

三、静态文件相关

1、为什么要使用
把静态文件的路径改成动态拼接的,避免在HTML页面中硬编码静态文件的导入路径 2、如何使用
先导入static模块:{% load static %}
两种使用方法:
1. <link rel="stylesheet" href="{% static 'bootstrap-3.3.7/css/bootstrap.css' %}"> 2. <link rel="stylesheet" href="{% get_static_prefix %}font-awesome-4.7.0/css/font-awesome.css"> 3、自定义simple_tag
和自定义filter类似,只不过接收更灵活的参数。
1. 自定义simple_tag的步骤
1. 在app下面新建一个python package名字叫templatetags
2. 在上一步的python package中新建一个py文件(my_extends.py)
3. 在py文件中写一个函数,实现自定义的simple_tag功能
4. 告诉Django我现在多了一个自定义的tag
5.例子
from django import template
from django.conf import settings
# 生成一个注册对象
register = template.Library() # 自定义一个拼接静态文件路径的tag函数
@register.simple_tag(name='myst')
def my_static(s):
# 拿到settings.py中的STATIC_URL的值
s1 = settings.STATIC_URL
# 进行字符串拼接
ret = s1 + s
# 返回
return ret 2. 使用自定义的tag
1. 在HTML文件中导入刚才创建的py文件
{% load my_extends %}
2. 重启Django项目
3. 按照普通的tag调用自定义的函数
<link rel="stylesheet" href="{% myst 'index/index.css' %}"> 4、自定义inclusion_tag
多用于返回html代码片段
跟上面自定义的步骤一样,只是代码有点不同
inclusion_tag相当于定义了一个局部的HTML,然后别的页面可以引用这段HTML代码
例如:
my_extends.py @register.inclusion_tag(filename='p.html', name='pp')
def my_p(num):
data = [i for i in range(1, num+1)]
return {'data': data} p.html {% for i in data %}
<span>{{ i }}</span>
{% endfor %} test.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="content-type" charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>test</title>
</head> <body> {% load my_extend %}
{% pp 10 %} </body>
</html> 解释:
filename是inclusion_tag指定的页面,接收inclusion_tag函数返回值,name是调用时的tags名,
调用的参数是从my_p接收,返回的内容是filename指定的页面的内容。
也就是说,上面的代码,最终展示的页面是test.html,
{% load my_extend %}
{% pp 10 %}
上面两句话是导入了my_extend自定义的tags
pp是tags的具体一个方法,10是参数,pp会把10这个参数传给my_p,然后my_p再传给p.html,
最后在test,html页面显示p.html的那部分代码,相当于把p.html的代码嵌入到了test,html里面展示出来

四、在模板中使用request

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

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

然后,在模板中我们就可以通过“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. 2019年度SAP项目实践计划

    2019年度SAP项目实践计划 一晃2018年过去了,而新的一年说来就来了. 对于新的一年,笔者也难免有所畅想.早在上个月下旬就开始制定新年的诸多计划,比如写作计划,比如人工智能学习计划,比如新年度旅 ...

  2. 关于ArcMap中打开ArcToolbox导致闪退的解决办法

    最近好久不用ArcGis的小编要用到ArcMap去发送一个GP服务,发现按照套路打开ArcMap点击ArcToolbox时,发生了ArcMap的闪退现象,几经周折终于解决了问题. 希望也遇到这类问题的 ...

  3. 仿9GAG制作过程(四)

    有话要说: 这次主要讲述主页面下拉刷新和上拉加载功能的实现. 主要是使用了SwipeRefreshLayout的布局方式,并在此基础上通过RecyclerView的特性增加了上拉加载的功能. 成果: ...

  4. C#自定义FTP访问类的代码

    如下资料是关于C#自定义FTP访问类的代码,应该对各朋友有帮助. using System; using System.Collections.Generic; using System.Text; ...

  5. Kotlin入门(33)运用扩展属性

    进行App开发的时候,使用震动器要在AndroidManifest.xml中加上如下权限: <!-- 震动 --> <uses-permission android:name=&qu ...

  6. Docker创建JIRA 7.2.4中文破解版

    目录 目录 1.介绍 1.1.什么是JIRA? 2.JIRA的官网在哪里? 3.如何下载安装? 4.对JIRA进行配置 4.1.打开浏览器:http://localhost:20012 4.2.JIR ...

  7. 【笔记】两个根因分析方法:5WHY&10WHY

    什么是问题根因分析 根本原因分析(root cause analysis):通过调查和分析问题哪里出错.为什么出错,寻求防止差错事故再次发生的必要措施,从而提高服务安全和质量. 根因分析目标 问题(发 ...

  8. DataSnap 多层返回数据集分析FireDAC JSON

    采用服务器返回数据,一种是返回字符串数据例如JSON,跨平台跨语言,任何语言调用都支持兼容,类似WEBService. 第二种是紧密结合c++builder语言,传输DataSet,可以是Client ...

  9. Cherrypy文件上传非ASCII文件名乱码问题解决

    Cherrypy 版本: 18.0.1 由于某些特殊原因(可能是与标准兼容的问题),Cherrypy对上传文件的原文件名使用 ISO-8859-1 编码方式解码,导致非 ASCII 的文件名显示为乱码 ...

  10. c/c++ linux 进程间通信系列3,使用socketpair,pipe

    linux 进程间通信系列3,使用socketpair,pipe 1,使用socketpair,实现进程间通信,是双向的. 2,使用pipe,实现进程间通信 使用pipe关键点:fd[0]只能用于接收 ...