0

urls.py

from item.models import ItemCategory, Item
from django.conf.urls.defaults import patterns, include, url

urlpatterns = patterns('order.views',
    url(r'^$', 'index'),
    url(r'category/$', 'category'),
    url(r'(?P<cat_id>\d+)/$', 'item'),
)

ビュー.py

from django.http import HttpResponse
from item.models import ItemCategory, Item
from django.shortcuts import render_to_response, get_object_or_404

def item(request, cat_id):
    item_list = get_object_or_404(ItemCategory, pk=cat_id)
    return render_to_response('order/item.html', {'item_list':item_list})

item.html

{% if item_list %}
    <h3>{{ item_list.name }}</h3>
    <ul>
        {% for item in item_list.choice_set.all %}
            <li>{{ item.id }} - {{ item.item }}</li>
        {% endfor %}
    </ul>
{% endif %}



上記のコードを指定すると、次のように表示されます。

カテゴリー1

- item 1
- item 2

しかし、それは次のようにしか表示されていません:

カテゴリー1

アイテムを表示しません

これについて何が間違っている可能性がありますか?

4

1 に答える 1

0

このコードはチュートリアルからコピーしましたか? 接続モデルはchoice_set意図的に呼び出されていますか? Itemモデルに がある場合ForeignKey(ItemCategory)、それは である必要がありますitem_set。しかし、それは単なる推測です。

ビューが戻る前にデバッグ行をビューに入れ、項目がchoice_setにそれらの選択肢を持っているかどうかを確認します。デバッガーがあり、コードを読んで推測するのではなく、実際に何が起こっているかを確認できる場合、問題は解決しなければなりません。

def item(request, cat_id):
    item_list = get_object_or_404(ItemCategory, pk=cat_id)
    import pdb; pdb.set_trace()
    return render_to_response('order/item.html', {'item_list':item_list})

以上の IPDB (easy_install または pip でインストールする必要があります)

def item(request, cat_id):
    item_list = get_object_or_404(ItemCategory, pk=cat_id)
    import ipdb; ipdb.set_trace()
    return render_to_response('order/item.html', {'item_list':item_list})

デバッガーで変数を記述し、それが期待どおりかどうかを確認します。

>>> item_list
[some output]
>>> item_list.choice_set.all()
[some output]

(オフトピック) 便利なショートカットを備えた django_annoying アプリがあります:

from annoying.decorators import render_to

@render_to('order/item.html')
def item(request, cat_id):
    item_list = get_object_or_404(ItemCategory, pk=cat_id)
    return {'item_list':item_list}
于 2012-04-28T07:56:49.797 に答える