成都网站建设设计

将想法与焦点和您一起共享

django自定义模板过滤器-创新互联

参考:http://www.cnblogs.com/qwj-sysu/p/4246605.html

10多年的荔波网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销的优势是能够根据用户设备显示端的尺寸不同,自动调整荔波建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“荔波网站设计”,“荔波网站推广”以来,每个客户项目都认真落实执行。

做的页面,一个tr里有两个td, 1、3、5等奇数数据要放在第一个td, 2、4、6等偶数数据要放在第二个td, (如果已经没有数据,td 内容要为空), 所以要根据取余数的结果来判断; 但django的模板没有取余操作,只好自定义一个

django的模板配置在:setting.py

TEMPLATES = [

  {

      'BACKEND': 'django.template.backends.django.DjangoTemplates',

一、后端

自定义标签和过滤器必须依赖于一个django app,也就是说,自定义标签和过滤器是绑定app的。该app应该包含一个templatetags目录,这个目录一个和model.py,views.py在同一个层级,记得在该目录下建立一个__init__.py文件一遍django知道这是一个python包。在该目录下,你可以新建一个python模块文件,文件名不要和其他app中的冲突就好。例如:

promotions

   migrations

   templatetags

       __init__.py

       get_mod.py

   __init__.py

   models.py

   views.py

get_mod.py

   # -*- coding:utf-8 -*-

   from django import template

   register = template.Library()

   @register.filter

   def get_mod(arg1,arg2):

  return arg1%int(arg2)

自定义过滤器就是接受一个或者连个参数的python函数。例如{{var | foo:"bar"}},过滤器foo接受变量var和参数bar。

如果前端为

{{ forloop.counter|get_mod:"2" }}

则为get_mod(arg1,arg2)

如果前端为

{{ forloop.counter|get_mod }}

则为 get_mod(arg1)

二、前端

         


             
{#                因一行有两列,所以根据取余数的结果来判断是放在第一个td还是第二个td,如果余数是1,放在第一个td,如果是2,放在第二个td;如果已经没有数据,td 内容要为空#}
               {% load get_mod %}
               {% for product in product_dict.ring %}

                 {% if forloop.counter|get_mod:"2" == 1  %}
                   
                       
                 {% elif empty %}
                       
                       
                 {% else %}
                       
                   
                 {% endif %}
               {% endfor %}
           
       

                         


                           
                         


                         


                           {{ forloop.counter|get_mod:"2" }}` product`.`1 `
                           已锁定
                         


                         


                           ¥ ` product`.`3 `
                         


                       

                           


                       

                         


                           
                         


                         


                           ` product`.`1 `(已锁定
                         


                         


                           ¥ ` product`.`3 `
                         


                       

注意:

{% load %}load的是模块名,而不是app名

forloop

forloop.counter 表示循环的次数,它从1开始计数

forloop.counter0 表示循环的次数,它从0开始计数

forloop.revcounter表示循环中剩下的items数量,第一次循环时设为items总数,最后一次设为1

forloop.revcounter0类似于forloop.revcounter,但它是表示的数量少一个,即最后一次循环时设为0

forloop.first当第一次循环时值为True,在特别情况下很有用:

   {% for object in objects %}  

        {% if forloop.first %}

  • {% else %}
  • {% endif %}

                ` object `

            

  •     {% endfor %}

    forloop.last当最后一次循环时值为True

       {% for link in links %}` link `{% if not forloop.last %} | {% endif %}{% endfor %}

    forloop.parentloop在嵌套循环中表示父循环的forloop:

       {% for country in countries %}  

            

            {% for city in country.city_list %}

                

                    

                    

                    

                

            {% endfor %}

            

    Country #` forloop`.`parentloop`.`counter ` City #` forloop`.`counter ` ` city `

        {% endfor %}

    创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


    分享名称:django自定义模板过滤器-创新互联
    链接URL:http://chengdu.cdxwcx.cn/article/dsgocc.html