Django 过滤器 实例

news/2024/7/6 0:27:55 标签: python, 数据库, 前端

实例1

safe
让Html标签以及一些特殊符号(如<)生效,下面以例子说明:

# value = '<b>CPT</b>'
# 那么输出的时候,CPT就是加粗的,如果不加safe那么显示出来的就是纯文本<b>CPT</b>
{{ value|safe }}

striptags
取消所有Html标签,下面以例子说明:

# value = '<p><b>CPT</b></p>'
# 那么输出的时候,只有CPT且没有加粗没有段落;如果不加的话会显示全部文本<p><b>CPT</b></p>
{{ value|striptags }}

linebreaks
让\n这种控制符号变化Html可以识别的

# value = 'CPT\nCPT'
# 那么输出的时候,会以这样的格式输出<p>CPT<br>CPT</p>,注意这些标签会生效,即会真的换行
# 很多时候在JS里调用字符串会产生语法错误,大部分情况是因为没有注意到\n的存在,想想为什么?
{{ value|linebreaks }}

truncatechars
这是今天介绍的四个filter中唯一一个带有参数的,用来截取字符串的一段,用法如下:

# value = 'CPTTTTTTTTTTTT'
# 那么输出的时候,会输出'CPT'
{{ value|truncatechars: 3 }}

有了这四个工具之后我们来讨论一些具体问题,都是以上列举场景的详细情况。

不想显示出Html标签
一篇文章总有粗体或者什么的,总有红色蓝色的,也就说是必须要被装饰的,但是从数据库中取出来的只是一个长字符串,因此我们需要告诉前端如何显示这些文字,这个时候只需要简单的使用safe过滤器即可。

影响排版
往往问题都出现在什么时候呢?出现在截取字符串即truncatechars同时使用的时候,比如在首页的时候我只想显示某些文章的前100个字,也许采用truncatechars:100过滤器截取,可以采用以下方法:

{{ value|truncatechars: 100 |safe }}

但很多时候这样还是会出错,为什么呢?因为也许你截取的100个字符里Html语法本身就是错误的,比如有

却没有

。所以出错就很显然了,但是有些人这样用:

{{ value|safe|truncatechars: 100 }}

想截取但不想渲染
很多情况都可以通过上面的句子解决,但有些时候我们并不想在首页显示文章摘要的时候渲染这些文字,比如正文中有些红红绿绿的字,但是我们显示摘要的时候只想显示纯黑色得字,怎么办呢?没错,把上面的safe直接改成striptags即可。

在Js里调用
但情况再恶心点,比如你在Js里调用,你还得考虑什么?没错Js是不支持换行的引号的,就是说Js里的引号只支持到一行,下面的语法在Js里是错误的:

var s = 'aaaaa
          bbbb'

但是我们不能保证从数据库中取出来的东西都没有换行,也许你还想截取前100个字符,也许你还想不显示这些html标签,好吧,看下面的代码:

{{ value|striptags|truncatechars: 100 |linebreaks }}

再恶心一点?
你其实会发现空格,大于号,小于号这些东西会以 , <这些形式储存的,所以上面的语句执行之后可能还有会 这种神奇的东西!如果这些东西出现在首页,那是要死的节奏啊。所以下面这条语句完美解决,好吧,我得了不用上四个过滤器会死的病:

{{ value|striptags|safe|truncatechars: 100 |linebreaks }}
 
 

 

实例2

需求:通过以键方式从字典中取值,如 test[key]=value

views.py

from django.template import RequestContext
from django.shortcuts import render_to_response def view(request) dicts = {"key1": 1, "key2": 2, "key3": 3, } return render_to_response("index.html", {"dicts":dicts,},context_instance = RequestContext(request)) 

1.在app目录下建立templatetags/在此目录下建立空文件__init__.py和myfilter.py
2.在myfilter.py编辑

 
from django import template

register = template.Library()

def key(d,key_name): value = 0 try: value = d[key_name] except KeyError: value = 0 return value register.filter('key',key)
 

3.在模板中使用

{% load myfilter %} #加载自定认标签
{{dicts|key:"key1"}}
 

http://www.niftyadmin.cn/n/1339335.html

相关文章

requestAnimationFrame,Web中写动画的另一种选择

HTML5/CSS3时代&#xff0c;我们要在web里做动画选择其实已经很多了: 你可以用CSS3的animattionkeyframes; 你也可以用css3的transition; 你还可以用通过在canvas上作图来实现动画&#xff0c;也可以借助jQuery动画相关的API方便地实现; 当然最原始的你还可以使用window.setTim…

C++ 、、 |、|| 、|=、?: 逻辑运算符用法

C &、&& |、|| 与|逻辑运算符用法&与&&|与|||?:参考链接&与&& &&     表示逻辑与的意思&#xff0c;即为and。当运算符两边的表达式的结果都为true时&#xff0c;整个运算结果才为true&#xff0c;否则&#xff0c;只要有一…

麦进斗:magento如何安装子主题

让我们的孩子创造一个主题&#xff0c;我们所有的自定义主题在Magento 2去这里&#xff1a;应用程序/设计/开发/ company_name / theme_name让我们假设&#xff0c;我们公司的名称是公司和我们的主题名称是基本。我们需要创建以下主题目录结构&#xff1a;<app><desig…

C++ Vector容器的push_back( )与pop_back( )函数

C Vector容器的push_back&#xff08;&#xff09;与pop_back&#xff08;&#xff09;函数push_back( )pop_back( )参考链接push_back( ) 函数将一个新的元素加到vector的最后面&#xff0c;位置为当前最后一个元素的下一个元素 push_back() 在Vector最后添加一个元素&#x…

高性能、高流量Java Web站点打造的22条建议

http://www.csdn.net/article/2013-12-20/2817861-22-recommendations-for-building-effective-high-traffic-web-application/2从2005年-2013年&#xff0c;Ashwanth Fernando曾供职于Best Buy、Pearson VUE、Walgreens、Walmart eCommerce等多家知名公司&#xff0c;现在Appl…

Nvidia Video Codec SDK——AppDec解析

Nvidia Video Codec SDK——AppDec解析项目框架AppDec硬解码整体框架主函数main具体硬解码流程函数DecodeMediaFile初始化解码器实际解码函数Decode回调函数HandlePictureDisplay数据指针参考链接项目框架 使用的SDK版本是Video_Codec_SDK_8.2.16&#xff0c;下载链接&#xf…

JAVACARD减少应用开发风险的建议

参考Java Card & STK Applet Development Guidelines by gemalto文档。 由于EEPROM和闪存的寿命有限&#xff0c;应用频繁的读写同一位置可能导致运行故障。本文主要描述了如何设计程序&#xff0c;尽量最小读写内存的必要。如果不遵守本文的建议的话&#xff0c;实际运行过…

CUDA高性能并行计算学习笔记1----认识CUDA

CUDA高性能并行计算学习笔记1----认识CUDACUDA C基础函数类型限定符执行配置运算符五个内置变量变量类型限定符转载链接CUDA C基础 CUDA C是对C/C语言进行拓展后形成的变种&#xff0c;兼容C/C语法&#xff0c;文件类型为”.cu”文件&#xff0c;编译器为”nvcc”&#xff0c;…