Python 如何将查询集呈现到表模板django中

Python 如何将查询集呈现到表模板django中,python,django,templates,django-queryset,Python,Django,Templates,Django Queryset,我有一个模型,它的定义如图所示,它对一个查询进行操作,并获取必须放置在表的适当单元格中的对象列表。下面是代码的相关部分 class Location(models.Model): x=models.IntegerField(null=True) y=models.IntegerField(null=True) z=models.CharField(max_length=5,null=True) def __unicode__(self): ret

我有一个模型,它的定义如图所示,它对一个查询进行操作,并获取必须放置在表的适当单元格中的对象列表。下面是代码的相关部分

class Location(models.Model):
    x=models.IntegerField(null=True)
    y=models.IntegerField(null=True)
    z=models.CharField(max_length=5,null=True)

    def __unicode__(self):
        return self.z
我想从这个数据库中检索所有对象,并将它们放在一个2d表中,该表的行和列由该对象的x,y定义。如果没有特定的对象(x,y),那么该特定的插槽应该在表中显示为空。这是我为满足这些目的而编写的视图

def gettable(request):
    events=[]
    for xdim in xrange(3):
        xe=[]
        for ydim in xrange(3):
            object=[0]
            object.append(Location.objects.filter(x=xdim,y=ydim))
            xe.append(object[-1])
            events.append(xe)
    return render(request, 'scheduler/table.html', {'events':events})
下面是代码的html部分

<table border="1">
    <th>Header 0</th>
    <th>Header 1</th>
    <th>Header 2</th>
    {% for event in events %}
    <tr>
    {% for x in event %} <td>{{ x }}</td>
    {% endfor %}
    </tr>
    {% endfor %}
</table>

标题0
标题1
标题2
{events%%中事件的百分比}
事件%}{{x}中x的{x}
{%endfor%}
{%endfor%}
我必须在这里解决多个问题

1.我的视图代码一点也不优雅(这很糟糕,因为我知道django提供了很多东西来处理这些任务),因为我专门定义了循环使用的变量,而不是从数据库对象的(x,y)值中获取这些变量

2.我得到
[]
格式的输出,但我希望它是'21'

3.如何在给定(x,y)不存在任何对象的情况下引入空单元格

4.请建议任何其他可能使我的代码更简单和通用的方法。

每一点:

  • 在我看来,您可以创建一个自定义过滤器或标记并使用queryset
  • 您需要定义一个
    \uuuuuunicode\uuuu
    (或
    \uuuuu字符串\uuuuu
    )方法来返回所需的项目
  • 如果该值为空或该项不存在,则渲染结果也将为空

  • HTH

    对于第2点,您给每个单元格一个列表而不是一个对象,{x.0}应该给您正确的值,但这也表明您在视图逻辑中接近它是错误的。

    如果您想让代码更简单,我建议使用应用程序。这种方法可以解决有关生成表的所有问题

    作为文件sais:

    django-tables2简化了将数据集转换为HTML的任务 桌子。它本机支持分页和排序。这对我有好处 HTML表django.forms对HTML表单的作用。e、 g

    其特点包括:

    • 任何iterable都可以是数据源,但还包括对Django QuerySet的特殊支持
    • 内置UI不依赖JavaScript
    • 支持基于Django模型自动生成表
    • 通过子类化支持自定义列功能
    • 分页
    • 基于列的表排序
    • 模板标记,以支持对HTML的简单呈现
    • Django 1.3中使用的通用视图mixin
    创建表非常简单,如下所示:

    import django_tables2 as tables
    
    class SimpleTable(tables.Table):
        class Meta:
            model = Simple 
    
    然后将在以下视图中使用:

    def simple_list(request):
        queryset = Simple.objects.all()
        table = SimpleTable(queryset)
        return render_to_response("simple_list.html", {"table": table},
                                  context_instance=RequestContext(request))
    
    最后在模板中:

    {% load django_tables2 %} 
    {% render_table table %}
    
    这个例子显示 这是最简单的情况之一,但是django-tables2可以做更多的事情!检查 有关更多详细信息,请参阅


    也可以使用字典而不是queryset。

    render现在更简单:返回render(请求'simple_list.html',{“table”:table})