django模板中的extends和include使用方法
一、extends使用方法
首先extends也就是继承,子类继承父类的一些特性。在django模板中通过继承可以减少重复代码。
首先我们建立一个app,名字叫做hello。别忘了在settings.py中的INSTALLED_APPS注册这个app。不注册会出现hello目录下的templates中的模板无法调用。
1.在根目录下的templates创建base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock %}</title>
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
这里的block就是继承后要被替换的内容,其他的则与该模板相同
2.在hello这个app中继承这个模板
在hello目录下新建templates目录,再在此目录下新建hello目录。hello目录中新建hello.html。目录结构就像这样,理解一下django模板引用路径的规则

hello.html内容如下
{% extends 'base.html' %}
{% block title %}{{ title }}{% endblock %}
{% block content %}{{ content }}{% endblock %}
首行代码就是先继承base.html,也就是有了除了block的剩下内容。后面两个则是在为block填空,填入的内容是要传入的参数。这里分别是title和content。这里可以看出模板语句是单个大括号加百分号,而模板变量是双大括号,没有百分号。
3.添加路由和方法
路由文件urls.py内容如下
from django.contrib import admin
from django.urls import path
from hello import views urlpatterns = [
path('hello/<str:title>/<str:content>/',views.hello),
path('admin/', admin.site.urls),
]
注意在路径中获取参数的方法,str还可以换为int。我觉得这种传参的方法比较简单容易理解,看了还有正则表达式的传参方法不是很直观,以后有机会再仔细学。
hello app中的views.py
from django.shortcuts import render # Create your views here.
def hello(request,title,content):
context={'title':title,'content':content}
return render(request,'hello/hello.html',context)
这里函数的形参名就是在路由中获取的参数名。通过传递参数会render给hello.html这个模板,而hello.html这个模板又会继承base.html这个父模板。
实现效果如下

4.总结extends
通过extends可以减少代码重复。可以再增加header、footer等来包含共同的头部和底部内容。其实我是先找到的include,但是include要么放在head中,可以减少重复引入css或js,要么放在body中当一个共同的导航条,或者底部内容。然而如果要在多处都include就不如直接用extends了。
二、include使用方法
这里我们在hello下新建hello2.html和hello3.html。
hello2.html内容如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>hello2</title>
</head>
<body>
{% include 'hello/hello3.html' %}
</body>
</html>
hello3.html内容如下
<p>
this is a p in hello3.html
</p>
可以看出,hello2.html包含了hello3.html中的内容。这样也达到了减少重复代码的作用。再添加views中hello2方法
def hello2(request):
return render(request,'hello/hello2.html')
以及urls中添加hello2
from django.contrib import admin
from django.urls import path
from hello import views urlpatterns = [
path('hello2/',views.hello2),
path('hello/<str:title>/<str:content>/',views.hello),
path('admin/', admin.site.urls),
]
实现效果如下

最近写了一个校内二手书交易平台的demo,很粗糙,就是个练练手的实战吧算是,欢迎来看看roadwide/campus_bookmarket
django模板中的extends和include使用方法的更多相关文章
- Django 模板中 变量 过滤器 标签 的使用方法
一.变量 1.变量的形式是:{{variable}}, 当模板引擎碰到变量的时候,引擎使用变量的值代替变量. 2.使用dot(.)能够访问变量的属性 3.当模板引擎碰到dot的 ...
- 在 Django 模板中遍历复杂数据结构的关键是句点字符
在 Django 模板中遍历复杂数据结构的关键是句点字符 ( . ). 实例二 mysit/templates/myhtml2.html修改如下 <!DOCTYPE html> <h ...
- django 模板中定义临时列表
<ul class="num_t clr"> {% for obj in ""|ljust:"10" %} <li> ...
- Django 模板中引用静态资源(js,css等)
Django 模板中免不了要用到一些js和CSS文件,查了很多网页,被弄得略晕乎,还是官网靠谱,给个链接大家可以自己看英文的. https://docs.djangoproject.com/en/1. ...
- Django 模板中使用css, javascript
Django 模板中使用css, javascript (r'^css/(?Ppath.*)$', 'django.views.static.serve', {'document_root': '/v ...
- django模板中变更数据库信息后,如何把变更后的信息同步更新到数据库
我们在基于django开发项目的过程中,经常会遇到数据库表字段增加,删除,或者修改的情况,以及字段属性更改的情况,因为django基于ORM模式来操作数据库的, 传统上如果django项目中的数据库m ...
- Django 模板中 include 标签使用小结
include 标签允许在模板中包含其它的模板的内容. 标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串. 每当在多个模板中出现相同的代码时,就应该考虑是否要使用 { ...
- 测试开发之Django——No6.Django模板中的标签语言
模板中的标签语言 1.if/else {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即:变量存在,非空,不是布尔值假),系统会显示在{% if %} 和 {% endi ...
- Django 模板中 变量 过滤器的使用方法
一.变量 1.变量的形式是:{{variable}}, 当模板引擎碰到变量的时候,引擎使用变量的值代替变量. 2.使用dot(.)能够访问变量的属性 3.当模板引擎碰到dot的 ...
随机推荐
- Idea中自动生成get,set,toString等方法
https://blog.csdn.net/sinat_41226396/article/details/80770520 自动生成main函数: https://blog.csdn.net/fanr ...
- Python3.6 SyntaxError: 'ascii' codec can't decode byte 0xe5 in position 7: ordinal not in range(128)
Django项目上线之后,死活无法正常运行(本地正常) 开始排查了好久才发现是字符编码问题 前面的小坑基本有一些,好(我)解(忘)决(了). 不好解决的是这个报错: SyntaxError: 'asc ...
- thinkphp5.0 - nginx 配置
上面介绍的是 thinkphp url 的访问方式,按照上面的访问方式配置nginx服务器配置,如下所示: server { listen 8090; server_name localhost 17 ...
- Java判断Integer类型的值是否相等
我们知道Integer是int的包装类,在jdk1.5以上,可以实现自动装箱拆箱,就是jdk里面会自动帮我们转换,不需要我们手动去强转,所以我们经常在这两种类型中随意写,平时也没什么注意 但Integ ...
- Javascript笔记:作用域和执行上下文
一.作用域 Javascript的作用域规则是在编译阶段确定的,有声明时的位置决定. JS中有全局作用域,函数作用域,块级作用域(ES6引入). 1. 全局作用域 在整个程序生命周期内都是有效的,在任 ...
- 一文搞定所有 web 自动化常见问题
Firefox 1. Firefox路径问题 firefox火狐浏览器去完成自动化测试时,代码报了如下错误: Cannot find firefox binary in PATH. mark sure ...
- nginx反向代理配置去除前缀
(转载)原文链接:https://blog.csdn.net/gongchenyu/article/details/85960027 使用nginx做反向代理的时候,可以简单的直接把请求原封不动的转发 ...
- sitecore 将媒体项目关联到为数字营销资产分类
在创建营销活动时,您可能希望跟踪联系人与媒体项目的交互方式,例如PDF,视频或您网站上的其他文档.您可以通过将媒体项目分类为数字营销资产来实现此目的. 当您应用分类标签到媒体库中的项目时,项目就变成了 ...
- Sitecore 营销分类
分类法是一种分层结构,可用于识别和组织信息.在Sitecore体验平台中,您可以使用分类法对营销活动进行分类,例如广告,目标和活动.您可以在市场营销控制面板中将分类标签应用于这些项目. 营销分类的四种 ...
- [转] console.log的高级用法
//基本用法 console.log('最常见用法\n换行'); console.error('输出错误信息 会以红色显示'); console.warn('打印警告信息 会以黄色显示'); cons ...