自定义模板标签和 过滤器:

因为模板标签和过滤器只给我们提供了 这么多 无法对我们的使用造成更多的便利 ,剩下的就需要我们自己去创建新的 模板标签和过滤器了

1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.

2、在app中创建templatetags模块(模块名只能是templatetags)

3、创建任意 .py 文件,如:my_tags.py

首先你需要在你的app中创建新的一个规定好的文件夹这个文件夹的名字是规定好的:templatetags

然后在这个文件夹内创建你的py文件

from django import template
from django.utils.safestring import mark_safe #这个模块是进行跳转的时候的必须的模块
register = template.Library() #创建这个对象
@register.filter # 用这个装饰器 来装饰我们的函数
def multi_filter(x,y):
return x*y
@register.filter
def link_tag(href):
return mark_safe('<a href = %s>click</a>'%href)

下面通过urls分发视图找到views内的对应的templace内的自定义标签 随之 执行

{% load my_filter_tag %}  {#这一步是找到你的创建的自定的规则#}
<p>{{ num|multi_filter:2 }}</p> {#在你的规定中你的multi_filter是求出两个数的乘数的#}
<p>{{ 'http://www.baidu.com'|link_tag }}</p> {#找到你的规定内的link_tag这个函数是定义一个按钮进行跳转的#}
 

模板继承 (extend):

1、创建一个base.html文件,
2、把要显示的页面的内容写在这里面,也就是html要在浏览器显示的内容
3、在right里面写个盒子
  {% block classinfo %}

  {% endblock %}
在这里面写个空盒子,以后谁来扩展就在这个盒子里面添加相应的内容就行了

4、然后再创建一个.html文件,让这个继承base.html文件,
  {% extends "base.html" %}    #必须是在文件的第一行
  在基板里面添加内容
  {% block classinfo %}
    <h2>首页</h2>
    <h2>学生信息</h2>
    <h3>{{ class_id }}班</h3>
  {% endblock%}

5、也可以写好多盒子,
  在left中写个盒子
    {% block menu %}
      <p>I see you you</p>
    {% endblock %}

模板继承是当你的templace内的html文件有多余的重复内容之后难道你要每一个都去重复的写吗?不  这个时候就用到了继承了

就好比你去浏览一个网页有很多网页是 当你浏览这个网页的时候你再点击这个网页内的其他的内容 那么可能你的顶部或者左边的某一部分还是不变的  那么这就用到了模板的继承(后面的使用很多的)

include  继承

{% include 'advertise.html' %}   
上面是继承了advertise.html内的所有的内容
{#include是直接把所有的内容给复制过来这个不太好没有规定#}

这个模版,我们把它叫作 base.html, 它定义了一个可以用于两列排版页面的简单HTML骨架。“子模版”的工作是用它们的内容填充空的blocks。

在这个例子中, block 标签定义了三个可以被子模版内容填充的block。 block 告诉模版引擎: 子模版可能会覆盖掉模版中的这些位置。

子模版可能看起来是这样的:

{% extends "base.html" %}

{% block title %}My amazing blog{% endblock %}

{% block content %}
{% for entry in blog_entries %}
<h2>{{ entry.title }}</h2>
<p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}

可修改的模板:

   {% block title %}  {#这个是定义一个可以修改的块 这个块被继承后可以修改#}
<title>Title</title>
{% endblock title %} {#结束这个 可以继承的块#} 这个是设置这个模板的title标签的内容可以被继承的时候修改
{{block.super}}
修改的同时把父模板的内容拿下来

这个是你再修改这个模板的同时把你的父亲模板的内容也给拿下来使用

{% extends 'base.html' %}
{% block content %}
<div class="article_list">
<ul>
{% for article in article_list %}
<li>{{ article }}</li>
{% endfor %} </ul>
</div>
{% endblock content %}
{% block title %}
<title>Article</title>
{% endblock %} 此次步骤是继承你的base.html内的content块 然后再把base内的这个块的内容给拿过来显示

模板继承and自定义模板标签和过滤器的更多相关文章

  1. Django 自定义模版标签和过滤器

    实现自定义过滤器 1. 创建register变量 在你的模块文件中,你必须首先创建一个全局register变量,它是用来注册你自定义标签和过滤器的, 你需要在你的python文件的开始处,插入几下代码 ...

  2. Django自定义模板标签和过滤器

    1.创建模板库 在某个APP所在目录下新建包templatetags,然后在其中创建存储标签或者过滤器的的模块,名称随意,例如myfilters.py. 在这个模块中编写相关代码. 注意:templa ...

  3. python 全栈开发,Day70(模板自定义标签和过滤器,模板继承 (extend),Django的模型层-ORM简介)

    昨日内容回顾 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 Quer ...

  4. Django 模板 语法 变量 过滤器 模板继承 组件 自定义标签和过滤器 静态文件相关

    本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法   模板渲染的官方文档 关于模板渲染你只需要记两种特殊符号(语法 ...

  5. Django基础(2)--模板自定义标签和过滤器,模板继承 (extend),Django的模型层-ORM简介

    没整理完 昨日回顾: 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 ...

  6. day58——模板继承、组件、自定义标签和过滤器、inclusion_tag、静态文件配置、url别名和反向解析、url命名空间

    day58 模板相关 模板继承(母版继承) 1. 创建一个xx.html页面(作为母版,其他页面来继承它使用) 2. 在母版中定义block块(可以定义多个,整个页面任意位置) {% block co ...

  7. Django模板自定义标签和过滤器,模板继承(extend),Django的模型层

    上回精彩回顾 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 Quer ...

  8. django “如何”系列4:如何编写自定义模板标签和过滤器

    django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足你的要求,如果觉得需更精准的模板标签或者过滤器,你可以自己编写模板标签和过滤器,然后使用{% load %}标签使用他们. 代码 ...

  9. Django框架(七)—— 模板层:变量、过滤器、标签、自定义标签和过滤器

    目录 模板层:变量.过滤器.标签.自定义标签和过滤器 一.模板层变量 1.语法 2.使用 二.模板层之过滤器 1.语法 2.常用过滤器 3.其他过滤器 三.模板值标签 1.for标签 2.if标签 3 ...

随机推荐

  1. web前端优化之reflow(减少页面的回流)

    1.什么是reflow? reflow(回流)是指浏览器为了重新渲染部分或者全部的文档,重新计算文档中的元素的位置和几何构造的过程. 因为回流可能导致整个Dom树的重新构造,所以是性能的一大杀手. 以 ...

  2. tomcat无法登录

    最近开始学JEE,在配置环境时,使用了tomcat 7.x的版本,然而点击manager app时无法登录. 按照网络上的教程(如:http://www.oschina.net/question/19 ...

  3. JDBC处理Transaction

    package com.ayang.jdbc; import java.sql.*; /** * transaction的构成,随便写一句insenrt,一执行executeUpdate(),它自动提 ...

  4. 第2章—装配Bean—自动化装配Bean

    自动化装配Bean 2.1.Spring配置可选方案 ​ 装配是依赖注入DI的本质,Spring提供了以下三种注入的装配机制: 在XMl中进行显式配置 在java中进行显式配置 隐式的Bean发现机制 ...

  5. Ubuntu 16.04 RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller” 不能上网

    来源:http://forum.ubuntu.org.cn/viewtopic.php?f=116&t=463646 1.执行如下命令 uname -a sudo lspci -knn sud ...

  6. http请求数据封装

    package com.wdm.utils; import java.io.ByteArrayOutputStream; import java.io.IOException; import java ...

  7. MINI3内存分配算法

    最差适应算法 #ifdef USING_WORST_FIT { //先找到第一个满足要求的空洞, //再以第一个为标准寻找最适合的空洞. //当最适合的空洞完全吻合 //就直接划给它,当空洞较大时就切 ...

  8. 七、并发容器ConcurrentHashMap

    一.简介 我们知道,HashMap是线程不安全的.而HashTable是线程安全的,但是JDK已经不建议使用HashTable,它已经被作为废除的实现. 在JDK并发包里面,ConcurrentHas ...

  9. 01-Web客户端与服务器详解

    1.CS与BS 软件使用方式上两种划分 C/S架构 Client/ServerPC客户端.服务器架构 特点: 在服务器当中就主要是一个数据库,把所有的业务逻辑以及界面都交给客户端完成 优点: 较为安全 ...

  10. 10、springboot之集成druid

    在pom.xml中添加 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid< ...