Kam*_*ddy 6 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):
return self.z
Run Code Online (Sandbox Code Playgroud)
从这个db我想要检索所有对象并将它们放在一个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})
Run Code Online (Sandbox Code Playgroud)
这是代码的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>
Run Code Online (Sandbox Code Playgroud)
我必须在这里解决多个问题.
1.我的视图代码一点都不优雅(这很糟糕,因为我知道django提供了很多东西来处理这些任务),因为我定义的变量专门用于循环而不是从(x,y)的值中取出数据库对象.
2.我得到[<Location: 21>]格式输出,但我希望它为'21'.
3.如何在不存在给定(x,y)的任何对象的情况下引入空单元格.
4.请建议任何其他可能使我的代码更简单和一般的方法.
ram*_*sus 18
如果你想让你的代码更简单,我想建议使用应用程序django-tables2.这种方法可以解决有关生成表的所有问题.
作为文档sais:
django-tables2简化了将数据集转换为HTML表的任务.它具有对分页和排序的原生支持.它为HTML表格提供了django.forms对HTML表单的作用.例如
其功能包括:
- 任何可迭代都可以是数据源,但包括对Django查询集的特殊支持.
- 内置UI不依赖于JavaScript.
- 支持基于Django模型的自动表生成.
- 通过子类化支持自定义列功能.
- 分页.
- 基于列的表排序.
- 用于实现对HTML的简单渲染的模板标记.
- 用于Django 1.3的通用视图mixin.
创建表非常简单:
Run Code Online (Sandbox Code Playgroud)import django_tables2 as tables class SimpleTable(tables.Table): class Meta: model = Simple然后将在视图中使用:
Run Code Online (Sandbox Code Playgroud)def simple_list(request): queryset = Simple.objects.all() table = SimpleTable(queryset) return render_to_response("simple_list.html", {"table": table}, context_instance=RequestContext(request))最后在模板中:
Run Code Online (Sandbox Code Playgroud){% load django_tables2 %} {% render_table table %}这个例子展示了一个最简单的例子,但是django-tables2可以做更多的事情!查看文档以获取更多详细信息.
也可以使用字典而不是查询集.
| 归档时间: |
|
| 查看次数: |
20998 次 |
| 最近记录: |