django模板语法学习之include示例详解

前言

在很多网站中,基本上的都会有一个开头和一个结尾,在每一个网页中都会显示。相对于这种的来说,在Django中,最好的方法就是使用include的标签,在每一个模板中都加入这个开头和结尾的标签。

include标签使用

假如我们有以下模板index.html,代码为:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
<div>网页公共头部部分</div>
<h2> 网页body部分 </h2>
<div>网页公共底部部分</div>
</body>
</html>

做过web开发的童鞋知道大部分网页的公共头部,公共底部部分代码每个页面都一样,那么就应该将其单独拿出做为一个html, 这样修改这部分代码时候,不需要每个页面都修改, 所以在django中我们可以这么做:

top.html

<div>网页公共头部部分</div> 

bottom.html

<div>网页公共底部部分</div> 

index.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
{% include 'top.html' %}
<h2> 网页body部分 </h2>
{% include 'bottom.html' %}
</body>
</html>

我们可以使用django模板引擎的Include语法,来将单独的页面包含到当前模板页面中。有同学有疑问,那我们通过视图传递给模板的上下文,在被包含的模板中可以使用吗?可以直接使用。

假如我们有如下视图: 

def index(request):
 return render(request, 'index.html', {'a': 100, 'b': 200}) 

该django的视图函数,传递给模板并渲染模板。

top.html修改如下:

<div>网页公共头部部分:{{ a }}</div> 

这么使用是没有问题的。

我这里有这样的一个问题,假如所有的页面都使用共同的头部top.html, 可能针对1.html 2.html 3.html所使用的头部有些样式不一样,所需top.html:

<div classs='acss'>网页公共头部部分</div> 

但是对于5.html, 6.html使用的头部样式为:

<div class='bcss'>网页公共头部部分</div> 

很显然,如果直接通过include方式包含公共头部,会导致一些页面显示问题。既然部分参数不一样,include允许我们传递参数给被include的模板,我们可以使用with语法,那么问题解决如下:

{{ % include 'top.html' with mycss='acss' % }} 

top.html可修改如下:

<div class='{{mycss}}'>网页公共头部部分</div> 

被包含模板中部分参数,由我们include的时候动态指定,那么top.html就不会因为细微差别而编写多份代码了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Django中URLconf和include()的协同工作方法

    捕获的参数如何和include()协同工作 一个被包含的URLconf接收任何来自parent URLconfs的被捕获的参数,比如: # root urls.py from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^(?P<username>\w+)/blog/', include('foo.urls.blog')), ) # foo/urls/blog.py from django.conf.urls

  • Django中模版的子目录与include标签的使用方法

    get_template()中使用子目录 把所有的模板都存放在一个目录下可能会让事情变得难以掌控. 你可能会考虑把模板存放在你模板目录的子目录中,这非常好. 事实上,我们推荐这样做:一些Django的高级特性(例如将在第十一章讲到的通用视图系统)的缺省约定就是期望使用这种模板布局. 把模板存放于模板目录的子目录中是件很轻松的事情. 只需在调用 get_template() 时,把子目录名和一条斜杠添加到模板名称之前,如: t = get_template('dateapp/current_dat

  • django模板语法学习之include示例详解

    前言 在很多网站中,基本上的都会有一个开头和一个结尾,在每一个网页中都会显示.相对于这种的来说,在Django中,最好的方法就是使用include的标签,在每一个模板中都加入这个开头和结尾的标签. include标签使用 假如我们有以下模板index.html,代码为: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>

  • 基于Django模板中的数字自增(详解)

    Django框架的模板提供了{% for %} 标签来进行循环 例如对集合进行循环是比较简单的 {% for row in v1 %} <div>{{row.name}}</div> {% endfor %} 但是在Django中,并不直接支持形如"int i = 0;i<100;i++" 这样的循环,Django有自己的自增方法 假设v1内有2个元素 1,从1开始正向自增 结果1,2 {% for row in v1 %} <div>{{fo

  • Django模板继承 extend标签实例代码详解

    在 views.py 上修改 ... def ordered(req): return render(req, "ordered.html") def shopping_car(req): return render(req, "shopping_car.html") 在 urls.py 上修改 ... path('ordered/', views.ordered), path('shopping_car/', views.shopping_car), ... 在

  • TypeScript新语法之infer extends示例详解

    目录 正文 模式匹配 提取枚举的值的类型 总结 正文 我们知道,TypeScript 支持 infer 来提取类型的一部分,通过模式匹配的方式. 模式匹配 比如元组类型提取最后一个元素的类型: type Last<Arr extends unknown[]> = Arr extends [...infer rest,infer Ele] ? Ele : never; 比如函数提取返回值类型: type GetReturnType<Func extends Function> = F

  • django文档学习之applications使用详解

    本文研究的主要是Django1.10文档的深入学习,Applications基础部分的相关内容,具体介绍如下. Applications应用 Django包含一个安装的应用程序的注册表,存储配置并提供内省. 它还保留了可用模型的列表. 这个注册表简单称为应用程序,它可以在django.apps中使用: >>> from django.apps import apps >>> apps.get_app_config('admin').verbose_name 'Admin

  • Django中的用户身份验证示例详解

    前言 这次开发微信抢票程序中,普通用户的身份是由微信管理的.当用户通过微信公众号(测试号)向后台发消息时,微信会将用户的身份标记为一个unique_id来识别,后端可以由此来判断用户身份.这种认证比较特殊,它不存在登陆.登出的操作.如果是一个普通的web应用,应该有用户的登陆.登出操作,当用户未经授权访问某个URL的时候,后端应该拒绝这次请求,或者是重定向到登陆界面. 在这次作业中,因为需要一个后台管理员来管理各种活动的创建和发布,因此也需要有用户的身份认证操作.这次的后端是Django,试了一

  • C++11模板元编程-std::enable_if示例详解

    C++11中引入了std::enable_if函数,函数原型如下: template< bool B, class T = void > struct enable_if; 可能的函数实现: template<bool B, class T = void> struct enable_if {}; template<class T> struct enable_if<true, T> { typedef T type; }; 由上可知,只有当第一个模板参数为

  • React特征学习Form数据管理示例详解

    目录 Form数据管理 重置Form状态 form验证 小结 Form数据管理 有时会遇到多个位置需要用户输入的情况,若每个状态都配置state或handler会很繁琐,可以尝试下面的方法 import * as React from 'react'; const LoginForm = () => { // 将多个状态合并为对象 const [state, setState] = React.useState({ email: '', password: '', }); // 通过单个hand

  • React学习笔记之列表渲染示例详解

    前言 本文主要给大家介绍了关于React列表渲染的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 示例详解: 列表渲染也很简单,利用map方法返回一个新的渲染列表即可,例如: const numbers = [1, 2, 3, 4, 5]; const listItems = numbers.map((number) => <li>{number}</li> ); ReactDOM.render( <ul>{listItems}<

  • Django中的模型类设计及展示示例详解

    django中设计数据模型类是基于ORM的对象关系映射更方便的进行数据库中的数据操作. 对象关系映射 把面向对象中的类和数据库表--对应,通过操作类和对象,对数表实现数据操作,不需要写sql,由ORM框架生成 django实现了ORM框架,在项目中与数据库之间产生桥梁作用 django数据库定义模型的步骤如下: python manage.py makemigrations python mange.py migrate 在应用models.py中编写模型类,继承models.Model类 在模

随机推荐