2013-05-22 81 views
0

template.html模板邏輯不正常

<tr><td> 
    {% if place %}         
     <input type="checkbox" id="select_all"/>Display all<br /> 
     <hr style="width: 150px;margin: 8px 0;"> 
     {% for value in place %} 
     {{ value }} 
     {% endfor %} 
    {% endif %}</td></tr> 
<tr><td>{% include "buttons/addalist.html" %} {% include "buttons/save.html" %}</td></tr> 

views.py

def type_list(request,type_id): 
    user = request.user 
    try: 
     type_list = Types.objects.get(user=user.id, id=type_id) 
    except: 
     return redirect('incident.views.incident_types') 
    if request.method == 'POST': 
     report_type = TypeSettingsForm(request.POST) 

     if 'title' in request.POST and report_type.is_valid(): 
      if request.POST['title'].strip(): 
       result = report_type.save(commit=False) 
       result.user = user 
       result.is_active = True 
       result.parent_type_id = type_id 
       result.save() 
     else: 
      place = TypeSelectionForm(type_id, request.POST) 
      if types.is_valid() and 'status' in request.POST: 
       types.save(type_id, request.POST) 
       type_list.is_active = eval(request.POST['status']) 
       type_list.save() 

       return redirect('incident.views.incident_types') 
    place = TypeSelectionForm(type_id) 

    return render(request, 'incident/type_list.html', 
     { 
      'about_menu': True, 
      'type_list': type_list, 
      'place':place 
    }) 

點擊addalist按鈕,值越來越保存並在模板中顯示。

但是最初,如果它們沒有從for循環顯示的值,則帶有複選框的Display All不應該顯示。如果輸入了for循環的單個值Display All with display box will come display.It is a small logical錯誤,但我沒有得到this.Help非常感謝。

+0

目前發生了什麼?你已經告訴我們會發生什麼,但目前沒有發生什麼?我認爲即使'place'中沒有值,也會顯示'Display All'? –

回答

1

您可以在視圖count_check_boxes中創建一個變量,用於統計表單中選擇的數量並在模板內測試它。

def type_list(request,type_id): 
    ... 
    place = TypeSelectionForm(type_id) 
    count_check_boxes = len(place.fields['checkbox_field'].choices) 
    return render(request, 'incident/type_list.html', 
     { 
      'about_menu': True, 
      'type_list': type_list, 
      'place':place, 
      'check_boxes_count':check_boxes_count 
    }) 

而且在你的模板:

<tr><td> 
    {% if place %}         
     {%if check_boxes_count > 0%} 
     <input type="checkbox" id="select_all"/>Display all<br /> 
     <hr style="width: 150px;margin: 8px 0;"> 
     {%endif%} 
     {% for value in place %} 
     {{ value }} 
     {% endfor %} 
    {% endif %}</td></tr> 
<tr><td>{% include "buttons/addalist.html" %} {% include "buttons/save.html" %}</td></tr> 

希望這有助於!

0
<tr><td> 
    {% if place %}  
     {% for value in place %} 
      {% if forloop.first %} 
      <input type="checkbox" id="select_all"/>Display all<br /> 
      <hr style="width: 150px;margin: 8px 0;"> 
      {% endif %} 
      {{ value }} 
     {% endfor %} 
    {% endif %}</td></tr> 
<tr><td>{% include "buttons/addalist.html" %} {% include "buttons/save.html" %}</td></tr> 

使用forloop.first檢查該for循環是在它的第一次迭代,如果所以它會僅每整個迭代一次顯示輸入。

+0

我嘗試了您的代碼,但它仍顯示相同的內容,如果沒有顯示{{values}}中的值,則顯示「顯示全部」複選框正在顯示。我想要的是,如果{{value}}中的值在顯示器上顯示,顯示器將顯示。 – user2086641

+0

'place'是怎麼樣的? {%if place%}檢查地點是否有任何元素。 –

+0

列表中的內容。這就是我想知道的。 –