2

シンプルなペットアプリがあります。

アプリはすべてのペットショップを表示し、ペットショップをクリックすると表示されます。あなたはすべてのペットの名前を見ることができます.

問題は、最初のペットと他のペットを作成した後です。テンプレートは新しいペットを更新しません。そのため、最初のペットのみが表示されます。

したがって、最初のペットを削除すると。にもかかわらず、ページが見つかりません (404) と表示されます。新しいペットをストアに追加しました。

テンプレート内で for ループを使用しようとしましたが、反復できないというエラーが表示され、単一のデータのみをレンダリングする場合は for ループを使用しないように友人に言われました。

店舗でより多くのペットを展示するにはどうすればよいですか?

問題は私のanimal.htmlと私のviews.pyにあると思います

私の動物.html

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

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

私の店.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})

私のモデル.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
4

2 に答える 2

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 %}
于 2013-03-03T11:33:54.900 に答える
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 %}

必要なオブジェクトをテンプレートに渡す方法の詳細については、クエリセットのドキュメントをご覧ください。

于 2013-03-03T11:36:24.020 に答える