Django No Pet匹配给定的查询

时间:2013-03-03 11:27:06

标签: django

我有一个简单的宠物应用程序。

该应用程序显示所有宠物商店,当您点击宠物商店时。您将看到所有的宠物名称,图片。

问题出在我创造了第一只宠物和其他宠物之后。模板不会更新新宠物。所以,它只显示第一只宠物。

所以当我删除第一只宠物时。它显示页面未找到(404)即使。我在店里加了新宠物。

我试图在模板中使用for循环,但它显示一个我无法迭代它的错误。一位朋友告诉我,当你只渲染单个数据时不要使用for循环。

如何在商店中展示更多宠物?

我认为问题出在我的animal.html以及我的views.py

my animal.html

 {% if pet %}
 <li>Pet = {{ pet.animal }}</li>
 <li>description = {{pet.description}} </li>

 <img src="{{ pet.image.url }}">
 {% endif %}

我的store.html

 Sydney's Pet Store
 {% if store %}
 <ul>
    {% for a in store %}
    <li><a href ="{% url world:brazil a.id %}">{{ a.name }}</li>
    {% endfor %}

 </ul>
 {% endif %}

我的views.py

 from pet.models import Store , Pet
 from django.shortcuts import render_to_response ,get_object_or_404

 def index(request):
    store = Store.objects.all()
    return render_to_response ('store.html',{'store':store})

 def brazil(request , animal_id):
    pet = get_object_or_404(Pet, pk=animal_id)
    return render_to_response ('animal.html',{'pet':pet})

我的models.py

 from django.db import models

 class Store(models.Model):
    name = models.CharField(max_length = 20)
    number = models.BigIntegerField()
    address =models.CharField(max_length = 20)
    def __unicode__(self):
    return self.name

 class Pet(models.Model):
    animal = models.CharField(max_length =20)
    description = models.TextField()
    owner = models.ForeignKey(Store)
    image = models.FileField(upload_to="images/")

    def __unicode__(self):
        return self.animal

2 个答案:

答案 0 :(得分:2)

如果要显示多个数据,则必须使用过滤器而不是get_object_or_404。 如果您只想显示1个数据,则将使用get_object_or_404。

def brazil(request , owner_id):
    pets = Pet.objects.filter(owner_id=owner_id)
    return render_to_response ('animal.html',{'pets':pets})


{% if pets %}
 <ul>
    {% for pet in pets %}
    <li>
        Pet = {{ pet.animal }}<br/>
        description = {{pet.description}}<br/> 
        <img src="{{ pet.image.url }}">
    </li>
    {% endfor %}

 </ul>
 {% endif %}

答案 1 :(得分:1)

在视图中创建一个查询集(类似于) -

 def brazil(request , animal_id):
    pets = Pet.objects.all()
    return render_to_response ('animal.html',{'pets':pets})

然后在模板中迭代它 -

{% for pet in pets %}
 <li>Pet = {{ pet.animal }}</li>
 <li>description = {{pet.description}} </li>
 <img src="{{ pet.image.url }}">
{% endfor %}

查看queryset docs,了解如何将所需对象传递给模板