搜索引擎需要查询到数据库中符合条件的所有网页并一一显示,前边介绍了单条语句的查询与显示,实战中需要将多条并列信息传入模板,列表肯定是不够的,这就考虑到了字典。
list = page.object_list
dict = {}#便于模板循环显示数据
#将返回字典加list字母为值,下标数字为键加入dict字典,
for i in range(0,len(list)):
dict['list'+str(i)] = list[i]
#将数据行数count加入字典,便于模板遍历
return render(request,'XunLu_details/index.html',{'dict':dict,'count':count,'paginator':paginator,'page':page})
其中list是经由Paginator处理后需要在当前页上显示的所有内容(列表类型,但其中的值为相应的数据表类),我们生成一个字典dict,并向其加入len(list)个key值(list0,list1,list2......)
然后将字典与其他参数一并拼接为render字典中传入(也可用locals(),但不利于可读性),这样在模板层中就变成了循环显示嵌套字典中的值的问题(还要有可分离性,因为不同的字段要做不同处理,比如加粗,链接等)。
<div class="col-md-9">
共找到{{count}}个网页 <a href="/">返回首页</a><br />
{%for list,value in dict.items %}
<div class="content">
<h2><a target="_blank" href="{{value.url}}">{{value.title}}</a></h2>
{{value.info}}
</div>
{%empty%}
<h3>好像没有找到您想要的东西呢,换个关键词试试吧</h3>
{%endfor%}
</div>
render字典中的值可以用{{}}来调用,获取到第一层字典,如{{count}};然后可以继续用字典中的items方法进行第二层调用,获取到key与对应的value值,此时的value值是单个数据表类,定义如下:
class Message(models.Model):
#设置对应的表名
class Meta:
db_table = 'datatables'
def __str__(self):
return '%s|%s|%s|%s'%(self.id,self.title,self.url,self.info)
id = models.AutoField(primary_key=True,null=False)
title = models.CharField('标题',max_length=100,null=False)
url = models.CharField('网址链接',max_length=300,null=False)
info = models.CharField('详细信息',max_length=300)
keyPerson = models.CharField('关键人物',max_length=20,null=False,default='谷爱凌')
故可以用显示类属性的方法显示其内容,如{{value.info}},同时也实现了格式分离,可以针对每一个类属性单独地增加样式。
参考:
|