4

これはかなり簡単なように思えますが、何らかの理由でこの問題を解決できません。私はジャンゴ1.4を使用しています。テンプレートのレンダリング中にリストQuerySet が空であるかどうかを確認する基本的なチェックを試みていますが、使用している if ステートメントは常に true と評価されるようです。

次のようなDjangoテンプレートがあります。

{% extends 'includes/base.html' %}

{% if object_list %}
...
{% block data %}
   {% for object in object_list %}
     ...
     {{ object.create_date }}
     ...
   {% endfor %}
{% endblock data %}
...
{% endif %}

「base.html」には次のブロックがあります。

<body>
{% block content %}
  ...   
  <div class="row-fluid">
    <div class="span12">
      {% block data %}
      <div align="center"><i>No data.</i></div>
      {% endblock data %}
    </div><!-- span12 -->
  </div><!-- row -->
{% endblock content %}
...
</body>

QuerySet を生成するビュー関数は次のとおりです。

def barcode_track(request, model):
    query = request.GET.get('barcode_search', '')
    object_list = model.objects.all()
    if query:
        object_list = model.objects.filter(barcode__icontains=query)
    return render_to_response('barcode_track/barcode_list.html',
                              {'object_list': object_list, 'query': query},
                              context_instance=RequestContext(request))

このフォームを介して呼び出されます:

<form id="barcode_search_form" method="get" action="" class="form">
    <input type="text" name="barcode_search" value="{{ query }}" />
    <button type="submit" class="btn">Search</button>
</form>

そして urls.py 行:

urlpatterns = patterns('barcode_track.views',
                       url(r'^$', 'barcode_track', {'model': Barcode},
                           name="barcode_track"),)

結果が に存在する場合にのみ結果が表示されobject_list、それ以外の場合は親ブロックが変更されないという考え方です。の名前を変更しようとしましobject_listたが、実際に空であること{{ dicts }}を確認するためにページに出力しました(これはそうです)。object_list私は一般的なビューを使用していませんが、その名前が示唆していることは理解しています。同様のロジックを使用して作成した別のアプリで実際にこの問題が発生したため、体系的に間違ったことをしているに違いありません。

ここで何が欠けていますか?

4

1 に答える 1

6

ifのように制御フロー タグをラップすることはできませんblock。あなたの問題は、ブロックの子テンプレートの定義がdata単にそこにあるという理由だけで使用されていることです。

if内にタグを配置することで修正できますblock data。リストが空のときに親の内容を継承したい場合は、 にelse展開されるケースを追加し{{ block.super }}ます。

于 2012-11-06T02:52:02.383 に答える