簡體   English   中英

循環Django模板中的對象列表

[英]Looping over a list of objects within a Django template

似乎無法看到我在哪里出錯了。 原諒我,因為我是新手。 我試圖在模型中顯示10個最新的對象。

這是我用來將所有這些對象放在列表中的循環:

 # put the top 10 newest Recipe objects in a list   
    entries_list = []
    all_recipes = Recipes.objects.annotate(Count('id'))
    newest_recipe_index = len(all_recipes)
    index = 0
    while index < 10:
        try:
            x = Recipes.objects.get(id=newest_recipe_index)
            entries_list.append(x)
            newest_recipe_index = newest_recipe_index - 1
            index = index + 1
        except:
            index = index + 1
            pass

然后我將其渲染到頁面,如下所示:

 c = RequestContext(request, {'form' : form, 'entries_list' : entries_list})
    return render_to_response("main.html", c)

這是我的HTML:

{% for entries in entries_list %}
        <i><b>Name:</i></b> {{ entries_list.name }}<br>
        <img src="/images{{ entries_list.picture }}" height="300" width="300"></img><br>
        <i><b>Ingredients:</i></b> {{ entries_list.ingredients }}<br>
        <p><i>{{ entries_list.description }}</i></p>
        <i><b>Created by:</i></b> {{ entries_list.user }}<br><br>
    {% endfor %}

這是models.py:

class Recipes(models.Model):
    name = models.CharField(max_length=50)
    ingredients = models.CharField(max_length=300)
    picture = models.ImageField(upload_to = 'recipes/%Y/%m/%d')
    user = models.CharField(max_length=30)
    date = models.DateTimeField(auto_now=True)
    description = models.TextField()    
    comments = models.ManyToManyField(Comments)

似乎循環正在運行。 那里有正確數量的條目。 只是模板標簽不起作用。 他們只是空白。 所以看起來這很好地將對象放在列表中,它只是不會檢索我的單個字段。

有幾件事。 您可以通過這種方法訂購查詢,然后獲取前十個條目。 它比你擁有的循環更有效。

您的模板不起作用的原因是您指的是列表而不是單個條目。 它應該是:

{% for entry in entries_list %}
        <i><b>Name:</i></b> {{ entry.name }}<br>
        <img src="/images{{ entry.picture }}" height="300" width="300"></img><br>
        <i><b>Ingredients:</i></b> {{ entry.ingredients }}<br>
        <p><i>{{ entry.description }}</i></p>
        <i><b>Created by:</i></b> {{ entry.user }}<br><br>
{% endfor %}

一旦模板工作,請嘗試以獲取您的entries_list:

entries_list = Recipes.objects.order_by('-id')[0:10]

這是關於排序和切片查詢的文檔: https//docs.djangoproject.com/en/dev/topics/db/queries

所以你做了什么:如果你知道C語言的基礎..你的問題是打印數組的元素,所以你會喜歡..

array = [1,2,3,4,5,6,7]
int i=0;
for(i=0;i<8;i++) {
       print i;      // print array; is wrong
}

類似地,在上面的例子中,您將迭代entries_list並將每個元素分配給變量entries 現在你將玩entries

{% for entries in entries_list %}
        <i><b>Name:</i></b> {{ entries.name }}<br>
        <img src="/images{{ entries.picture }}" height="300" width="300"></img><br>
        <i><b>Ingredients:</i></b> {{ entries.ingredients }}<br>
        <p><i>{{ entries.description }}</i></p>
{% endfor %}

@CarL為您提供了更好的解決方案,以便在您的模型中獲得最新的10種食譜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM