我们经常会有这样的需求,比如评论功能,每个评论都有可能会有自己的子评论,如果在界面只展示成一列的话非常不美观,也不能体现出他们的层级关系。那么我们今天就来看看如何使用Django的模版来生成树状结构,以本站为例,效果如下图所示:
那么我们要怎么实现呢?首先先看看评论实体的定义,如下所示:
类注释(models.Model): 身体=模型。文本框(“正文”,max_length=300) 作者=models.ForeignKey(设置。AUTH_USER_MODEL, verbose_name='作者”,空白=True, null=True,> @register.simple_tag * * kwargs def查询(qs): ”““模板标签允许queryset过滤。用法: {%查询书籍作者=作者mybooks %} {%的书mybooks %} … {% endfor %} ”“” 以前返回qs.filter (* * kwargs) >接下来下面这段代码是树节点的模版代码。
{%负载blog_tags %} {%负载comments_tags %} & lt; div id=癱ommentlist-container”class=癱omment-tab”比; & lt; ol类=癱ommentlist”比; {%查询article_comments parent_comment=没有parent_comments %} {%在parent_comments comment_item %} {% 0为深度%} {%/标签/comment_item_tree包括“评论。html“%} {% endwith %} {% endfor %} & lt;/ol> & lt;/div>其中的<代码>{%查询article_comments parent_comment=没有parent_comments %}> 代码的功能就是从评论中筛选出来是父级的评论。comment_item_tree.html的实现也很简单:
{%负载blog_tags %} & lt;李class="评论甚至线,深度——{{深度}}父母”id=" - {{comment_item置评。pk}}” 比; & lt; div id=" div-comment - {{comment_item。pk}}”class=" comment-body”比; & lt; div class=" comment-meta commentmetadata”比; {{comment_item。created_time}} & lt;/div> & lt; p> {{comment_item。身体| |逃离custom_markdown}} & lt;/p> & lt; div类="回复"祝辞& lt;一个类=癱omment-reply-link” href=" javascript:无效(0)”rel=巴獠縩ofollow” aria-label="回复给{{comment_item.author。用户名}}”在回复& lt;/a> & lt;/div> & lt;/div> & lt;/li> & lt; !- # # #评论比; {%查询article_comments parent_comment=comment_item cc_comments %} {% cc_comments cc的%} {% comment_item=cc/标签/comment_item_tree template_name="评论。html“%} {%=|添加深度:深度1%} {%包括template_name %} {% endwith %} {% endwith %} {% endfor %}其中最主要的部分就是& lt;/li>标签后面那段。这里使用,和包括配合来在每一次循环里面重复的引入comment_item_tree.html,并且每次引入时赋予当前的评论变量和深度(每层循环深度会+ 1),然后在每个评论处使用<代码> 代码>来实现缩进,这样就实现了树状显示。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
利用Django模版生成树状结构实例代码