一、filter和simple_tag

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

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

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

from django import template
from django.utils.safestring import mark_safe # mark_safe 设置数据安全不转义 register = template.Library() #register的名字是固定的,不可改变 @register.filter
def filter_multi(v1,v2):
return v1 * v2
<br>
@register.simple_tag
def simple_tag_multi(v1,v2):
return v1 * v2
<br>
@register.simple_tag
def my_input(id,arg):
result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
return mark_safe(result)

4、在使用自定义simple_tag和filter的html文件中导入之前创建的 my_tags.py

{% load my_tags %}   # load 会循环找所有app下的templatetags下的文件

5、使用simple_tag和filter(如何调用)

--.html
{# 先导入我们自定义filter那个文件 #}
{% load xxx %} # num=12
{# 使用我们自定义的filter #}
{{ num|filter_multi:2 }} # 24 {{ num|filter_multi:"[22,333,4444]" }} {% simple_tag_multi 2 5 %} 参数不限,但不能放在if for语句中
{% simple_tag_multi num 5 %}

注意:filter可以用在if等语句后,simple_tag不可以

{% if num|filter_multi:30 > 100 %}
{{ num|filter_multi:30 }}
{% endif %}

二、inclusion_tag

多用于返回html代码片段

先理解include标签,

include 标签

    • {% include %} 标签允许在模板中包含其它的模板的内容。
    • 下面这个例子都包含了 nav.html 模板
      {% include "nav.html" %}​
include标签,定义的模板数据是死的只有模板内容;而过滤器和自定义标签是定义数据的。@register.inclusion_tag可以将这两者结合在一起。
还是在
templatetags下的文件中:
web.py:
from django.template import Library
import re
register =Library() @register.inclusion_tag("rbac/menu.html")
def get_menu_styles(request):
permission_menu_list = request.session.get("permission_menu_list")
for item in permission_menu_list:
if re.search("^{}$".format(item["url"]), request.path):
item["class"] = "active" return {"permission_menu_list":permission_menu_list}

数据会先交给rbac/menu.html渲染,再以字符串形式返回;谁调用就传给谁

rbac/menu.html:

<div class="static-menu">

        {% for item in permission_menu_list %}
<a href="{{ item.url }}" class="{{ item.class }}">
<span class="icon-wrap"><i class="fa {{ item.icon }}"></i></span> {{ item.title }}
</a>
{% endfor %} </div>

可以直接返回渲染后的数据,且解决了代码的复用性,谁用直接调就行

调用::

layout.html :

 {% load web %}  <!--调用-->
{% get_menu_styles request %}

实例:

点击标签加入active样式:

        解决思路1:
每一个返回母版的视图函数中:
permission_menu_list = request.session.get("permission_menu_list")
for item in permission_menu_list:
if re.search("^{}$".format(item["url"]), request.path):
item["class"] = "active" 解决思路2: 引入inclusion_tag方法:
@register.inclusion_tag("rbac/menu.html")
def get_menu_styles(request):
permission_menu_list = request.session.get("permission_menu_list")
for item in permission_menu_list:
if re.search("^{}$".format(item["url"]), request.path):
item["class"] = "active" return {"permission_menu_list":permission_menu_list} 在layout.html中:
<div class="menu-body"> {% load web %}
{% get_menu_styles request %} </div>
 


Django模板—-自定义过滤器和标签的更多相关文章

  1. Django入门--自定义过滤器与标签

    ---恢复内容开始--- 为了让Django找到自定义的模板过滤器和模板标签,需要进行文件路径配置,配置方式分为APP目录下配置和项目路径下配置两种方式: 1.在APP目录下配置:针对某个应用特定的自 ...

  2. Django——5 自定义过滤器及标签

    Django 自定义过滤器 自定义标签 简单标签 包含标签 自定义过滤器 自定义过滤器就是一个带有一个或两个参数的Python 函数: - (输入的)变量的值 —— 不一定是字符串形式. - 参数的值 ...

  3. Django学习——Django settings 源码、模板语法之传值、模板语法之获取值、模板语法之过滤器、模板语法之标签、自定义过滤器、标签、inclusion_tag、模板的导入、模板的继承

    Django settings 源码 """ 1.django其实有两个配置文件 一个是暴露给用户可以自定义的配置文件 项目根目录下的settings.py 一个是项目默 ...

  4. Django 05 自定义过滤器、自定义标签

    Django 05 自定义过滤器.自定义标签 一.自定义过滤器 #1.在项目目录下创建一个python package包 取名为common(这个名字可以自定义) #2.在common目录下创建一个t ...

  5. django自定义过滤器和标签

    1.自定义过滤器和标签的流程: 1.在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为app01的app下创建了一个templatetags的包,并在该包下创 ...

  6. Web框架之Django_04 模板层了解(过滤器、标签、自定义过滤器、标签、inclusion_tag、模板的继承与导入)

    摘要: 模版层(模板语法) 模板语法 过滤器 标签 自定义过滤器.标签 inclusion_tag 模板的继承 模板的导入 一.模板语法: 常用语法:{{     }}    变量相关{% %}    ...

  7. 小白学习django第三站-自定义过滤器及标签

    要使用自定义过滤器和标签,首先要设置好目录结构 现在项目目录下建立common的python包 再将common加入到setting.py中的INSTALLED_APP列表中 在common创建目录t ...

  8. 一、变量.二、过滤器(filter).三、标签(tag).四、条件分支tag.五、迭代器tag.六、自定义过滤器与标签.七、全系统过滤器(了解)

    一.变量 ''' 1.视图函数可以通过两种方式将变量传递给模板页面 -- render(request, 'test_page.html', {'变量key1': '变量值1', ..., '变量ke ...

  9. 自定义过滤器和标签 & 静态文件相关

    自定义过滤器和标签 1.在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 2.在app中创建templatetags模块(模块名 ...

随机推荐

  1. oracle 查询中实现分页

    那么Oracle如何实现分页呢?--Oracle分页查询SELECT   * FROM   (     SELECT         ROWNUM R,YANGCQ_ID,YANGCQ_BRANCHI ...

  2. C#编程技巧

    拷贝/克隆(深度/浅拷贝).序列化.反射 Json/Xml 窗体的单例模式 https://www.cnblogs.com/imstrive/p/5426503.html 使用XmlSerialize ...

  3. Apache rewrite 出现 400 Bad Request 的解决方法

    <VirtualHost *:80 *:81>         ServerAdmin deng5765@163.com         DocumentRoot /active/www/ ...

  4. Python re模块与正则表达式的运用

    re模块 永远不要起一个py文件的名字,这个名字和你已知的模块同名 查找 findall():     匹配所有   每一项都是列表中的一个元素 语法 :   findall(正则判断条件,要判断字符 ...

  5. 1 响应式页面-@media介绍,

    我们为什么要写自适应的页面(响应式页面) 众所周知,电脑.平板.手机的屏幕是差距很大的,假如在电脑上写好了一个页面,在电脑上看起来不错,但是如果放到手机上的话,那可能就会乱的一塌糊涂,这时候怎么解决呢 ...

  6. MAPREDUCE的实战案例

    reduce端join算法实现 1.需求: 订单数据表t_order: id date pid amount 1001 20150710 P0001 2 1002 20150710 P0001 3 1 ...

  7. 02-26C#三级省市区ajax联动控件,利用UpdatePanel,以及页面取值

    第一步:设置界面 <%@ Control Language="C#" AutoEventWireup="true" CodeFile="PCAC ...

  8. Linux字符设备驱动实现

    Linux字符设备驱动实现 要求 编写一个字符设备驱动,并利用对字符设备的同步操作,设计实现一个聊天程序.可以有一个读,一个写进程共享该字符设备,进行聊天:也可以由多个读和多个写进程共享该字符设备,进 ...

  9. pandas中DataFrame相关

    1.创建 1.1  标准格式创建 DataFrame创建方法有很多,常用基本格式是:DataFrame 构造器参数:DataFrame(data=[],index=[],coloumns=[]) In ...

  10. 配置Linux的SSH双重认证

    背景:双因子认证(简称:2FA,以下简称2FA),在这里其为SSH的第二重认证.2FA指的是密码以及实物(信用卡.SMS手机.令牌或指纹等生物标志)两种条件对用户进行认证的方法.通过两种不同的认证程序 ...