2013-09-01 26 views
0

我有列表有兩種類型的元素讓我們說,元素是元素A或元素B.我將這個列表從後端傳遞到模板。在模板中,我將循環每個元素,然後我想檢查它是否是類型A,如果它是類型B,則執行此操作。我怎樣才能做這種類型檢查?在列表中檢查類型django模板語言

澄清這裏是一個很簡單的例子

Models.py 
class Type_A(models.Model): 
test1 = models.CharField() 

class Type_B(models.Model): 
test2 = models.CharField() 


Views.py 
c = {} 
l = list() 
l = [Type_A.objects.all(), Type_B.objects.all()] 
c['list'] = shuffle(l) 
return render_to_response('test.html', c , context_instance=RequestContext(request)) 

的test.html 我期待這樣的事情

{% for x in list %} 
    {% if x is Type_A %} 
     do this 
    {% else %} 
     do that 
    {% endif %} 
{% endfor %} 

回答

0

shuffle是就地操作(如sort),它沒有返回值(它返回None),所以這樣的:

c['list'] = shuffle(l) 

是行不通的,c['list']None

>>> i = [1,2,3] 
>>> b = [4,5,6] 
>>> z 
[1, 2, 3, 4, 5, 6] 
>>> random.shuffle(z) # Note, no return value 
>>> z 
[3, 6, 2, 1, 5, 4] # z is shuffled 

試試這個版本:

c = {} 
type_a = [('A', x) for x in Type_A.objects.all()] 
type_b = [('B', x) for x in Type_B.objects.all()] 
combined = type_a+type_b 
shuffle(combined) 
c['random'] = combined 

然後:

{% for t,i in random %} 
    {% ifequal t "A" %} 
     {{ i }} is Type "A" 
    {% else %} 
     {{ i }} is Type "B" 
    {% endifequal %} 
{% endfor %} 

或者,你可以這樣做:

{% for t,i in random %} 
    {{ i }} is of type {{ t }} 
{% endfor %} 
+0

這樣做的問題是,我不想讓他們的順序。我想獲得一個隨機的順序他們.. :) –