Django模板如果语句总是求值为true

mar*_*iov 4 django templates if-statement block conditional-statements

这似乎应该非常简单,但由于某种原因我无法解决这个问题.我正在使用Django 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 %}
Run Code Online (Sandbox Code Playgroud)

'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>
Run Code Online (Sandbox Code Playgroud)

生成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))
Run Code Online (Sandbox Code Playgroud)

通过这种形式调用:

<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>
Run Code Online (Sandbox Code Playgroud)

和urls.py行:

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

这个想法是只有在存在的情况下才会显示结果object_list,否则父块将保持不变.我已经尝试更改名称object_list,并且我已经打印{{ dicts }}到页面以确保object_list实际上是空的(它是).我没有使用通用视图,虽然我意识到这个名字的含义也是如此.我实际上在使用类似逻辑编写的另一个应用程序中遇到了这个问题,因此我必须系统地做错误的事情.

我在这里错过了什么?

Jam*_*arp 6

你不能像if周围的那样包装控制流标签block.您的问题是,子模板的块定义data正在被使用,因为它就在那里.

您可以通过将if标签放在里面来修复它block data.如果要在列表为空时继承父项的内容,请添加else扩展为的案例{{ block.super }}.