欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Django模版生成樹狀結(jié)構(gòu)實例代碼

 更新時間:2019年05月19日 10:47:01   作者:且聽風吟  
這篇文章主要給大家介紹了關(guān)于利用Django模版生成樹狀結(jié)構(gòu)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Django具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

我們經(jīng)常會有這樣的需求,比如評論功能,每個評論都有可能會有自己的子評論,如果在界面只展示成一列的話非常不美觀,也不能體現(xiàn)出他們的層級關(guān)系。那么我們今天就來看看如何使用Django的模版來生成樹狀結(jié)構(gòu),以本站為例,效果如下圖所示:

那么我們要怎么實現(xiàn)呢?首先先看看評論實體的定義,如下所示:

class Comment(models.Model):
 body = models.TextField('正文', max_length=300)
 author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='作者', on_delete=models.CASCADE)
 article = models.ForeignKey(Article, verbose_name='文章', on_delete=models.CASCADE)
 parent_comment = models.ForeignKey('self', verbose_name="上級評論", blank=True, null=True, on_delete=models.CASCADE)

可以看到,有一個parent_comment字段,關(guān)聯(lián)自己。這樣就可以根據(jù)這個字段來生成層級關(guān)系。 為了方便我們使用,我們自定義了一個叫query的tag,也可以叫修飾器。定義tag的代碼如下,tag的定義應該定義在app/templatetags目錄下,這里py文件命名為blog_tags.py:

@register.simple_tag
def query(qs, **kwargs):
 """ template tag which allows queryset filtering. Usage:
   {% query books author=author as mybooks %}
   {% for book in mybooks %}
   ...
   {% endfor %}
 """
 return qs.filter(**kwargs)

接下來下面這段代碼是樹節(jié)點的模版代碼。

{% load blog_tags %}
{% load comments_tags %}
 <div id="commentlist-container" class="comment-tab" style="display: block;">
    <ol class="commentlist">
     {% query article_comments parent_comment=None as parent_comments %}
     {% for comment_item in parent_comments %}
      {% with 0 as depth %}
       {% include "comments/tags/comment_item_tree.html" %}
      {% endwith %}
     {% endfor %}
    </ol>
   </div>

其中的{% query article_comments parent_comment=None as parent_comments %}的功能就是從評論中篩選出來是父級的評論。 comment_item_tree.html的實現(xiàn)也很簡單:

{% load blog_tags %}
<li class="comment even thread-even depth-{{ depth }} parent" id="comment-{{ comment_item.pk }}"
 style="margin-left: {% widthratio depth 1 3 %}rem">
 <div id="div-comment-{{ comment_item.pk }}" class="comment-body">
  <div class="comment-meta commentmetadata">
   {{ comment_item.created_time }}
  </div>
  <p>{{ comment_item.body |escape|custom_markdown }}</p>
  <div class="reply"><a class="comment-reply-link"
        href="javascript:void(0)" rel="external nofollow" 
        onclick="do_reply({{ comment_item.pk }})"
        aria-label="回復給{{ comment_item.author.username }}">回復</a></div>
 </div>

</li><!-- #comment-## -->
{% query article_comments parent_comment=comment_item as cc_comments %}
{% for cc in cc_comments %}
 {% with comment_item=cc template_name="comments/tags/comment_item_tree.html" %}
  {% with depth=depth|add:1 %}
   {% include template_name %}
  {% endwith %}
 {% endwith %}
{% endfor %}

其中最主要的部分就是</li>標簽后面那段。這里使用with和include配合來在每一次循環(huán)里面重復的引入comment_item_tree.html,并且每次引入時賦予當前的評論變量和depth(每層循環(huán)depth會+1)。然后在每個評論處使用style="margin-left: {% widthratio depth 1 3 %}rem"來實現(xiàn)縮進,這樣就實現(xiàn)了樹狀顯示。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • python+selenium實現(xiàn)登錄賬戶后自動點擊的示例

    python+selenium實現(xiàn)登錄賬戶后自動點擊的示例

    本篇文章主要介紹了python+selenium實現(xiàn)登錄賬戶后自動點擊的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 簡單了解Pandas缺失值處理方法

    簡單了解Pandas缺失值處理方法

    這篇文章主要介紹了簡單了解Pandas缺失值處理方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Python 用Redis簡單實現(xiàn)分布式爬蟲的方法

    Python 用Redis簡單實現(xiàn)分布式爬蟲的方法

    本篇文章主要介紹了Python 用Redis簡單實現(xiàn)分布式爬蟲的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • python對ip地址進行排序、分類的方法詳解

    python對ip地址進行排序、分類的方法詳解

    這篇文章主要介紹了python對ip地址進行排序、分類的方法詳解,IP協(xié)議全稱為“網(wǎng)際互連協(xié)議Internet?Protocol”,IP協(xié)議是TCP/IP體系中的網(wǎng)絡(luò)層協(xié)議,需要的朋友可以參考下
    2023-07-07
  • Python爬取股票信息,并可視化數(shù)據(jù)的示例

    Python爬取股票信息,并可視化數(shù)據(jù)的示例

    這篇文章主要介紹了Python爬取股票信息,并可視化數(shù)據(jù)的示例,幫助大家更好的理解和使用python爬蟲,感興趣的朋友可以了解下
    2020-09-09
  • 在Linux下調(diào)試Python代碼的各種方法

    在Linux下調(diào)試Python代碼的各種方法

    這篇文章主要介紹了在Linux下調(diào)試Python代碼的各種方法,用于編程后的debug工作,需要的朋友可以參考下
    2015-04-04
  • 使用python?AI快速比對兩張人臉圖像及遇到的坑

    使用python?AI快速比對兩張人臉圖像及遇到的坑

    這篇文章主要介紹了如何使用python?AI快速比對兩張人臉圖像?實現(xiàn)過程比較簡單,但是第三方python依賴的安裝過程較為曲折,下面是通過實踐對比總結(jié)出來的能夠支持的幾個版本,避免大家踩坑,需要的朋友可以參考下
    2023-02-02
  • python基礎(chǔ)知識之私有屬性和私有方法

    python基礎(chǔ)知識之私有屬性和私有方法

    這篇文章主要介紹了python基礎(chǔ)知識之私有屬性和私有方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Python使用sorted排序的方法小結(jié)

    Python使用sorted排序的方法小結(jié)

    這篇文章主要介紹了Python使用sorted排序的方法,結(jié)合三個實例分析了Python使用sorted方法進行元素排序操作的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07
  • 詳解python實現(xiàn)識別手寫MNIST數(shù)字集的程序

    詳解python實現(xiàn)識別手寫MNIST數(shù)字集的程序

    這篇文章主要介紹了詳解python實現(xiàn)識別手寫MNIST數(shù)字集的程序,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08

最新評論