您好,登錄后才能下訂單哦!
參考:http://www.cnblogs.com/qwj-sysu/p/4246605.html
做的頁面,一個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)
二、前端
<table 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 >
<p>
<a href="` products`.`4 `"><img alt="" src="/static/promotions/` product`.`0 `" /></a>
</p>
<p>
{{ forloop.counter|get_mod:"2" }}` product`.`1 `
<span >(</span><span >已鎖定</span><span >)</span>
</p>
<p class="MsoNormal">
¥ <span >` product`.`3 `</span>
</p>
</td>
{% elif empty %}
<td>
<p></p>
</td>
</tr>
{% else %}
<td >
<p>
<a href="` product`.`4 `"><img alt="" src="/static/promotions/` product`.`0 `" /></a>
</p>
<p>
` product`.`1 `(<span >已鎖定</span>)
</p>
<p class="MsoNormal">
¥ <span >` 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 %}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。