zoukankan      html  css  js  c++  java
  • Django 过滤器 实例

    实例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
    让 这种控制符号变化Html可以识别的

    # value = 'CPT CPT'
    # 那么输出的时候,会以这样的格式输出<p>CPT<br>CPT</p>,注意这些标签会生效,即会真的换行
    # 很多时候在JS里调用字符串会产生语法错误,大部分情况是因为没有注意到 的存在,想想为什么?
    {{ 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"}}
     
  • 相关阅读:
    排列组合算法
    C++内存管理——堆&&栈
    编程之美——1.2 中国象棋将帅问题
    Gentoo: fcitx的安装
    Gentoo NTFS USB盘有写权限
    Gentoo U盘无法自动挂载,打开报告Not Authorized,xfce只有logout,suspend/shutdown灰化等问题解决方法
    Kernel: 打开CONFIG_EMBEDDED从而使更多的kernel option可以更改
    Gentoo Enable framebuffer console (没有安装X,KDE的时候)
    转载:Gentoo和Ubuntu包管理命令对比集
    Gentoo Rebuild virtualboxmodules when kernel is updated
  • 原文地址:https://www.cnblogs.com/zknublx/p/5965049.html
Copyright © 2011-2022 走看看