TemplateView与ListView:不同的输出

时间:2014-11-14 12:38:17

标签: django django-templates django-views

看,我正在通过我自己的例子来玩Django文档。 我只是通过改变代码的很少部分来表达一种给出不同ouptuts的行为:

带着LISTVIEW:

Views.py片段:

class UsuarioListView(ListView):

model = Usuario

def get_context_data(self, **kwargs):
        context = super(UsuarioListView, self).get_context_data(**kwargs)
        return context

Urls.py:

  url(r'^listaUsuarios/',UsuarioListView.as_view(),name='listado_usuarios'),

访问时给予结果:

  

USUARIOS

luis
paco
sonia

正确列出我拥有的3位用户, 但!如果我尝试使用基于django

示例的TEMPLATE VIEW

views.py:

class UsuarioListView(TemplateView):

template_name="listado_usuarios.html"

def get_context_data(self, **kwargs):
        context = super(UsuarioListView, self).get_context_data(**kwargs)
        return context

(来自django.views.generic.base导入TemplateView)

Urls.py:

 url(r'^listaUsuarios/',UsuarioListView.as_view(),name='listado_usuarios'),

网址保持不变,输出为:

  

USUARIOS

No hay usuarios.

(没有用户)

那么,这怎么可能,一个显示我拥有的3个用户,另一个显示没有用户。 顺便说一句,即使模板是正确的,这里也是:

<h1>Usuarios</h1>
<ul>
{% for u in object_list %}
    <li>{{ u.nombre}}</li>
{% empty %}
    <li>No hay usuarios.</li>
{% endfor %}
</ul>

对不起,如果这是一个非常愚蠢的问题,或者我在这里忘记了什么。希望有人可以让我毫无疑问...... 此外,&#34;用户&#34;我列出的对应于我创建的模型,而不是django用户表。

非常感谢。

1 个答案:

答案 0 :(得分:1)

因此,如果您使用带有指定模型的ListView,它会根据您在该模型中的条目自动生成object_list

另一方面,如果您使用的是TemplateView,并且想要遍历object_list,则必须先生成它,因为TemplateView不会这样做。

如果您进入TemplateViewget_context_data()并执行:context['object_list'] = Usuario.objects.all()

ListView生成了一个object_list,其中包含您指定的模型中的所有对象,并将其发送到上下文,而TemplateView需要您手动生成上下文数据。