2012-02-07 61 views
1

在文章索引中,我想顯示給定文章的第一張照片。照片是在另一個模型中有外鍵來模擬文章的位置。因此,我從給定類別中選擇應該顯示的文章,然後選擇給定類別中的所有照片,並在模板中匹配它們的slu and,然後我(想要)只顯示第一個結果。forloop.counter不會在我的Django模板中按預期重置

但我用於此目的forloop.counter不按預期工作。當它通過endfor標記時,它將繼續而不重新設置。

例如代替:「1,2,3,endfor,1,2,3,4,5,endfor,1,2,3,4」它計數:「1,2,3,endfor, 4,5,6,7,8,endfor,9,10,11,12「

我想念什麼?

這裏的模板代碼:

{% extends 'index.html' %} 
{% load markup %} 
{% load thumbnail %} 

{% block content %} 
    {% for itm in plays %} 
     <h2>{{ itm.name }}</h2> 
     <div>{{ itm.desc }}</div> 
     <div> 
      {% for ftk in photos %} 
       {% if ftk.nameofplay.slug == itm.slug %} 
        {% if forloop.counter == 1 %} 
         {% thumbnail ftk.photo "100x100" crop="center" as im %} 
         <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}"> 
         {% endthumbnail %} 
        {% endif %} 
       {% endif %} 
      {% endfor %} {# forloop.counter should reset here and start from 1 again. or not? #} 
     </div> 
     <div>{{ itm.text|markdown|truncatewords_html:25 }}</div> 
    {% endfor %} 
{% endblock %} 

和views.py我送一些像這樣的:

plays = Plays.objects.filter(category__slug__exact = category) 
photos = Photos.objects.filter(nameofplay__category__slug__exact = category) 

謝謝!

+0

正確的答案是從@滾動的石頭;但是爲了將來的參考 - ['forloop.first'](http:// https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#for)和['forloop.last'](https ://docs.djangoproject.com/en/1.3/ref/templates/builtins/#for)將有助於__ loop_邏輯的第一個實例。 – 2012-02-07 11:30:56

回答

1

照片的循環將重新開始與戲劇的下一個實例的queryset一旦循環已經通過所有的照片不見了但是,似乎可能有更快的方法來實現這一點。

由於照片模型通過ForeignKey連接到文章模型,並假設照片連接到正確的文章,您應該能夠在您的模板中做這樣的事情,這應該避免必須檢查每張照片每一篇文章:

plays = Plays.objects.filter(category__slug__exact = category) 

{% for itm in plays%} 
    {% itm.photo_set.all.0 %} 
{% endfor %} 

查看相關對象的參考文檔的更多細節: https://docs.djangoproject.com/en/dev/ref/models/relations/

+0

是的,就是這樣。快速和容易。謝謝! – tookanstoken 2012-02-07 08:54:42

+0

感謝您的建議,這是正確的方法,它更容易使用_set爲後續關係倒退! – 2014-07-18 21:30:58

0

通過「額外」方法在您的視圖方法中準備您的文章及其第一張照片的數據。 https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.extra

plays = Plays.objects.filter(category__slug__exact=kategorie).extra(
select={ 
    'first_photo': 'Put this your select query for getting first photo (i.e. photo url)' 
}, 
params={'category': your_param}) 

在模板中,你可以得到的第一張照片爲:

{% for item in plays %} 
    {{ item.first_photo }} 
{% endfor %} 
+0

謝謝,我試圖避免這一點。問題是,我沒有訪問正確的參數。在這個級別/觀點我有父類別的知識,但不能指定文章並將照片添加到它...看起來很尷尬的情況。因爲我將包含所有文章的對象發送到我的模板,所以我怎樣才能向它添加相關照片?但是我的解決方案將工作,如果櫃檯工作... – tookanstoken 2012-02-07 06:03:04

相關問題