参考:http://www.cnblogs.com/qwj-sysu/p/4246605.htmlhtml
作的页面,一个tr里有两个td, 一、三、5等奇数数据要放在第一个td, 二、四、6等偶数数据要放在第二个td, (若是已经没有数据,td 内容要为空), 因此要根据取余数的结果来判断; 但django的模板没有取余操做,只好自定义一个前端
django的模板配置在:setting.py
python
TEMPLATES = [django
{后端
'BACKEND': 'django.template.backends.django.DjangoTemplates',app
1、后端ide
自定义标签和过滤器必须依赖于一个django app,也就是说,自定义标签和过滤器是绑定app的。该app应该包含一个templatetags目录,这个目录一个和model.py,views.py在同一个层级,记得在该目录下创建一个__init__.py文件一遍django知道这是一个python包。在该目录下,你能够新建一个python模块文件,文件名不要和其余app中的冲突就好。例如:函数
promotions
oop
migrations
spa
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)
2、前端
<table style="background-color:#ffffff;margin-top:30px;width:80%;" class="ke-zeroborder" border="0" cellspacing="50" bordercolor="#000000" cellpadding="0" align="center">
<tbody>
{# 因一行有两列,因此根据取余数的结果来判断是放在第一个td仍是第二个td,若是余数是1,放在第一个td,若是是2,放在第二个td;若是已经没有数据,td 内容要为空#}
{% load get_mod %}
{% for product in product_dict.ring %}
{% if forloop.counter|get_mod:"2" == 1 %}
<tr>
<td style="border-bottom:#ccc 1px solid;text-align:center;border-top:#ccc 1px solid;">
<p>
<a href="` products`.`4 `"><img alt="" src="/static/promotions/` product`.`0 `" /></a>
</p>
<p>
{{ forloop.counter|get_mod:"2" }}` product`.`1 `
<span style="text-align:center;white-space:normal;background-color:#FFFFFF;">(</span><span style="text-align:center;white-space:normal;background-color:#FFFFFF;color:#E53333;">已锁定</span><span style="text-align:center;white-space:normal;background-color:#FFFFFF;">)</span>
</p>
<p class="MsoNormal">
¥ <span style="line-height:1.5;font-size:12px;">` product`.`3 `</span>
</p>
</td>
{% elif empty %}
<td>
<p></p>
</td>
</tr>
{% else %}
<td style="border-bottom:#ccc 1px solid;text-align:center;border-top:#ccc 1px solid;">
<p>
<a href="` product`.`4 `"><img alt="" src="/static/promotions/` product`.`0 `" /></a>
</p>
<p>
` product`.`1 `(<span style="text-align:center;white-space:normal;background-color:#FFFFFF;color:#E53333;">已锁定</span>)
</p>
<p class="MsoNormal">
¥ <span style="line-height:1.5;font-size:12px;">` product`.`3 `</span>
</p>
</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
注意:
{% 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 %}<li class="first">{% else %}<li>{% endif %}
` object `
</li>
{% endfor %}
forloop.last当最后一次循环时值为True
{% for link in links %}` link `{% if not forloop.last %} | {% endif %}{% endfor %}
forloop.parentloop在嵌套循环中表示父循环的forloop:
{% for country in countries %}
<table>
{% for city in country.city_list %}
<tr>
<td>Country #` forloop`.`parentloop`.`counter ` </td>
<td>City #` forloop`.`counter `</td>
<td>` city `</td>
</tr>
{% endfor %}
</table>
{% endfor %}