2014-01-15 54 views
0

所以我有一個模板:的Django的模板極限輸出循環

{% for Chapter in latest_chapter_list %} 
         {% ifequal Chapter.manga|truncatechars:20 Manga.name|truncatechars:20 %} 
          {{Chapter.chapter}} 
         {% endifequal %} 
        {% endfor %} 

型號:

class Manga(models.Model): 
    name = models.CharField(max_length=20,help_text='Name of the comic/manga') 

class Chapter(models.Model): 
    manga = models.ForeignKey(Manga) 
    chapter = models.IntegerField(default=1, help_text='Number of a chapter') 

所以,我想的是,模板將只顯示5個項目,而不是所有項目那通過了if。在正常的代碼中,我會添加一個臨時值來計算每個添加和稍後的重置次數,但是我對django很陌生,我不知道如何處理這個問題。 另外我不明白爲什麼我的if只適用於如果我將兩個名字縮短爲相等長度,儘管它們的長度應該相同,不是嗎?

而且我的看法:

def index(request): 
    latest_item_list = Manga.objects.all().order_by('-added_on')[:5] 
    latest_chapter_list = Chapter.objects.all().order_by('-chapter') 



    context = {'latest_item_list': latest_item_list, 
       'latest_chapter_list': latest_chapter_list 
} 
    return render(request, 'Item/index.html', context) 

任何幫助或建議,將不勝感激!

編輯,SOLUTION:取得了新的意見篩選列表:

latest_chapter_list_short = Chapter.objects.filter(chapter__lt=6) 

,並通過它迭代的完整列表,而不是!

回答

0

Django在其模板中功能有限,因此只需遍歷要顯示的元素即可。例如,可以在視圖中準備的數據只包含五個元素:

latest_item_list = Manga.objects.all().order_by('-added_on')[:5] 
chapters = Chapter.objects.all().order_by('-chapter') 
latest_chapter_per_mange = compute_chapters_per_mange(chapters, latest_item_list) 

compute_chapters_per_mange其中確定了每個Manga模型的章節。

第二個問題:Django現在比較Manga對象的字符串表示形式與Manga.name,它們可能不盡相同。這可以解釋爲什麼你需要truncatechars,雖然我不完全明白爲什麼。如果您在Manga模型上定義了__unicode__方法,那麼您可以指定應如何將該模型的實例顯示爲字符串(即self.name)。

+0

我曾考慮過這個問題,但是我無法正確地計算它,並且在模板中使用有限的循環似乎是一個更簡單的解決方案,但我認爲這是不可能的。 – Granitas