2011-06-07 65 views
0

我是从一个“如果”语句的例子工作,但由于某种原因,我不能得到它的工作。 我尝试了'if'中的每个可能的语句,但似乎没有什么可以使if语句运行。相反,Else语句运行。为什么django中的If语句不工作?

样品

{% extends 'base.html' %} 
{% block content %} 

<h2>Hardware Inventory</h2> 

{% if hardware %} 

<table id="datatable"> 
    <thead> 
     <tr> 
      <th>Name</th> 
      <th>Manufacturer</th> 
      <th>Category</th> 
     </tr> 
    </thead> 
    <tbody> 
    {% for item in hardware %} 
     <tr> 
      <td><a href="/inventory/hardware/{{ item.id }}">{{ item.name }}</a></td> 
      <td>{{ item.manufacturer }}</td> 
      <td>{{ item.kind }}</td> 
     </tr> 
    {% endfor %} 
    </tbody> 
</table> 

{% else %} 

<p>The inventory is empty.</p> 

{% endif %} 


{% endblock %} 

{% extends 'base.html' %} 
{% block content %} 

<h2>News</h2> 

{% if entry %} 

{% for item in entry %} 
<table id = "news"> 
    <tr> 
     <td><a href="/news/Entry/{{ item.id }}">{{ item.title }}</a></td> 
     <td>{{ item.body }}</td> 
     <td>{{ item.pub_date }}</td> 
    </tr> 
</table> 
{% endfor %} 



{% else %} 
<p>No News</p> 
{% endif %} 


{% endblock %} 

我的新闻view.py,林不知道如何将它正确地写,但我尝试不同的组合,在目前这一个错误导致它崩溃

def index(request): 
    return render_to_response('news/index.html', {'Entry': Entry}, context_instance=RequestContext(request)) 

def Entry(request): 
    Entry = Entry.objects.all().order_by('pub_date') 
    return render_to_response('news/Entry.html', {'item':item}, context_instance=RequestContext(request)) 
+0

是您的视图设置'entry'语境? – 2011-06-07 15:19:03

+0

如果您在视图中显示您的内容,它可能会有所帮助。 – 2011-06-07 15:19:35

+3

注意你实际上并不需要'if' /'else' - 的'for'标签需要一个['empty'](https://docs.djangoproject.com/en/1.3/ref/templates/builtins/ #for-empty)子句,它执行相同的操作。 – 2011-06-07 15:27:00

回答

3

确保您确实将entry传递到上下文中。例如:

render_to_response('template.html', { 'entry': entry }) 

尚未设定的变量表现为在Django模板设置为None变量。

UPDATE:

提出了一些修改,以您的视图代码;甚至不知道如何使用你的模板进行模板渲染。

原文:

def index(request): 
    return render_to_response('news/index.html', {'Entry': Entry}, context_instance=RequestContext(request)) 

def Entry(request): 
    Entry = Entry.objects.all().order_by('pub_date') 
    return render_to_response('news/Entry.html', {'item':item}, context_instance=RequestContext(request)) 

修改:

def index(request): 
    entry = Entry.objects.all().order_by('pub_date') 
    return render_to_response('news/index.html', {'entry': entry}, context_instance=RequestContext(request)) 

我不认为你甚至需要Entry方法,所以删除了。我保持你的命名相同,但是由于它是多个项目,因此称这个变量为entries更好。

+0

@Angela,区分大小写,你的Entry是大写,模板是小写。 – 2011-06-07 15:31:34

+0

我添加视图代码,我认为这个问题是在这两个 – 2011-06-07 15:33:34

+0

@Angela那些不能成为你的真实想法,因为他们都有这将阻止他们工作的(它们都引用了未定义的变量在调用选择render_to_response)错误。 – 2011-06-07 15:36:40