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

    过滤器 描述 示例
    upper 以大写方式输出 {{ user.name | upper }}
    add 给value加上一个数值 {{ user.age | add:”5” }}
    addslashes 单引号加上转义号  
    capfirst 第一个字母大写 {{ ‘good’| capfirst }} 返回”Good”
    center 输出指定长度的字符串,把变量居中 {{ “abcd”| center:”50” }}
    cut 删除指定字符串 {{ “You are not a Englishman” | cut:”not” }}
    date 格式化日期  
    default 如果值不存在,则使用默认值代替 {{ value | default:”(N/A)” }}
    default_if_none 如果值为None, 则使用默认值代替  
    dictsort 按某字段排序,变量必须是一个dictionary {% for moment in moments | dictsort:”id” %}
    dictsortreversed 按某字段倒序排序,变量必须是dictionary  
    divisibleby 判断是否可以被数字整除
    {{ 224 | divisibleby:2 }}  返回 True
    escape 按HTML转义,比如将”<”转换为”&lt”  
    filesizeformat 增加数字的可读性,转换结果为13KB,89MB,3Bytes等
    {{ 1024 | filesizeformat }} 返回 1.0KB
    first 返回列表的第1个元素,变量必须是一个列表  
    floatformat 转换为指定精度的小数,默认保留1位小数 {{ 3.1415926 | floatformat:3 }} 返回 3.142  四舍五入
    get_digit 从个位数开始截取指定位置的数字 {{ 123456 | get_digit:’1’}}
    join 用指定分隔符连接列表 {{ [‘abc’,’45’] | join:’*’ }} 返回 abc*45
    length 返回列表中元素的个数或字符串长度  
    length_is 检查列表,字符串长度是否符合指定的值 {{ ‘hello’| length_is:’3’ }}
    linebreaks 用<p>或<br>标签包裹变量 {{ “Hi David”|linebreaks }} 返回<p>Hi</p><p>David</p>
    linebreaksbr 用<br/>标签代替换行符  
    linenumbers 为变量中的每一行加上行号  
    ljust 输出指定长度的字符串,变量左对齐 {{‘ab’|ljust:5}}返回 ‘ab   ’
    lower 字符串变小写  
    make_list 将字符串转换为列表  
    pluralize 根据数字确定是否输出英文复数符号  
    random 返回列表的随机一项  
    removetags 删除字符串中指定的HTML标记 {{value | removetags: “h1 h2”}}
    rjust 输出指定长度的字符串,变量右对齐  
    slice 切片操作, 返回列表 {{[3,9,1] | slice:’:2’}} 返回 [3,9]
    {{ 'asdikfjhihgie' | slice:':5' }} 返回 ‘asdik’
    slugify 在字符串中留下减号和下划线,其它符号删除,空格用减号替换
    {{ '5-2=3and5 2=3' | slugify }} 返回 5-23and5-23
    stringformat 字符串格式化,语法同python  
    time 返回日期的时间部分  
    timesince 以“到现在为止过了多长时间”显示时间变量 结果可能为 45days, 3 hours
    timeuntil 以“从现在开始到时间变量”还有多长时间显示时间变量  
    title 每个单词首字母大写  
    truncatewords 将字符串转换为省略表达方式
    {{ 'This is a pen' | truncatewords:2 }}返回
    This is ...
    truncatewords_html 同上,但保留其中的HTML标签
    {{ '<p>This is a pen</p>' | truncatewords:2 }}返回
    <p>This is ...</p>
    urlencode 将字符串中的特殊字符转换为url兼容表达方式 {{ ‘http://www.aaa.com/foo?a=b&b=c’ | urlencode}}
    urlize 将变量字符串中的url由纯文本变为链接  
    wordcount 返回变量字符串中的单词数  
    yesno 将布尔变量转换为字符串yes, no 或maybe
    {{ True | yesno }}
    {{ False | yesno }}
    {{ None | yesno }}
    返回 
    yes
    no 
    maybe

    自定义过滤器:

    第一步: 在app目录下创建包 templatetags

    在templatetags下创建py文件,文件名随意,比如

    自定义simple_tag, 不能在模板中使用if判断
    from django import template
    from django.utils.html import format_html
    import datetime
    
    register = template.Library()
    
    @register.simple_tag
    def page_cut(current_page, loop_page):
        #分页: 固定显示前后5页
        differ = abs(current_page - loop_page)
        if differ < 5:
            li = '''<li class=""><a href="?page=%s">%s<span class="sr-only">(current)</span></a></li>''' % (loop_page, loop_page)
            return format_html(li)
        else:
            #这里一定要返回一个空字符串,否则在前端会显示一系列的None
            return ''

     

    自定义过滤器函数filter

    因为sample_tag不能使用if判断,所以才有了它

    最多只能有两个参数,一个是变量值,一个是选项值

    from django import template
    from django.utils.html import format_html
    import datetime
    
    register = template.Library()
    
    @register.filter
    def time_color(exp_date):
        #给一个月内到期的html标签加上class属性
        startdate = datetime.datetime.now().date()
        enddate = startdate + datetime.timedelta(30)
        if (enddate - exp_date).days > 0 and (enddate - exp_date).days <= 30:
            td = '''<td class="%s">%s</td>''' % ('exp_date', exp_date)
            return format_html(td)
        elif (enddate - exp_date).days > 30:
            td = '''<td class="outof">%s</td>''' % (exp_date)
            return format_html(td)
        else:
            td = '''<td>%s</td>''' % (exp_date)
            return format_html(td)

    第二步,html引用

    在文件开头导入

    {% load my_page %}

    使用

    <tbody>
            {% for project in projects_list %}
            <tr>
                <td><a href="{% url 'projects_detail' project.id %}">{{ project.com_name }}</a></td>
                <td>{{ project.name}}</td>
                <td>{{ project.domain }}</td>
                <td>{{ project.get_status_display }}</td>
                {{ project.exp_date|time_color }}
                <td>{{ project.ftp }}</td>
            </tr>
            {% endfor %}
        </tbody>
    <!-- 页码导航 -->
    <nav>
      <ul class="pagination">
        {% if projects_list.has_previous %}
            <li class=""><a href="?page={{ projects_list.previous_page_number }}" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>
        {% endif %}
    
        {% for page_num in projects_list.paginator.page_range %}
         {% if page_num == projects_list.number %}
            <li class="active"><a href="?page={{ page_num }}">{{ page_num }}<span class="sr-only">(current)</span></a></li>
         {% else %}
             #分页标签
            {% page_cut projects_list.number page_num %}
         {% endif %}
        {% endfor %}
    
        {% if projects_list.has_next %}
            <li class=""><a href="?page={{ projects_list.next_page_number }}" aria-label="Previous"><span aria-hidden="true">&raquo;</span></a></li>
        {% endif %}
      </ul>
    </nav>
  • 相关阅读:
    实现一个程序两套快捷键
    SystemC中文教程一
    logback的使用和logback.xml详解
    mysql语句练习50题
    Intellij IDEA中使用Debug调试详解
    用node-webkit把web应用打包成桌面应用
    Idea导入项目详解
    iReport 5.6.0 Error: net.sf.jasperreports.engine.JRException: Error executing SQL statement for : data 最优解决方案
    CentOS 7.X 关闭防火墙
    将 MySQL root 的远程访问密码由空密码改为 password
  • 原文地址:https://www.cnblogs.com/huangxm/p/6286144.html
Copyright © 2011-2022 走看看