多級(jí)評(píng)論的實(shí)現(xiàn)-創(chuàng)新互聯(lián)

第一種:

comment_list=models.Comment.objects.filter(news_id=new_id)
ret=[]  # 最終拿到的數(shù)據(jù)
comment_list_dict={}  # 構(gòu)建的中間字典
for row in comment_list:  # 通過(guò)查到的數(shù)據(jù)中的id作為key,每一行數(shù)據(jù)作為value生成一個(gè)字典
    row.update({"children":[]})  # 構(gòu)建一個(gè)鍵children對(duì)應(yīng)一個(gè)空列表
    comment_list_dict[row["id"]]=row  # 將id作為鍵,當(dāng)前行作為值存到該字典中

for item in comment_list:  # 遍歷一遍取到的數(shù)據(jù)列表
    parrent_row=comment_list_dict.get(item["parent_id"])  # 拿到當(dāng)前行對(duì)應(yīng)的父親的地址
    if not parrent_row:  # 如果父親是None,則直接進(jìn)入ret中
        ret.append(item)
    else:  # 否則,將這行append到父親的children中
        parrent_row["children"].append(item)  # 重點(diǎn)在這一行,用到了上面提到的第一個(gè)知識(shí)點(diǎn)
print(ret)

第二種:

from django.utils.safestring import mark_safe
# 遞歸查找父節(jié)點(diǎn)
def find_father(dic, comment_obj):
    # 對(duì)字典中的每一組元素進(jìn)行循環(huán)操作
    for k, v_dic in dic.items():
        # 如果k等于comment_obj的父節(jié)點(diǎn),那么表示找到了父親。
        if k == comment_obj.parent_comment:
            # 找到了父親,認(rèn)祖歸宗,把自己歸位到父親下面,并給將來(lái)的兒子留個(gè)位置
            dic[k][comment_obj] = {}
            # 找到了父親,處理完畢,返回
        else:
            # 剛才沒(méi)找到,剝一層,接著往下找。
            find_father(dic[k], comment_obj)

# 遞歸生成html字符串
def generate_comment_html(sub_comment_dic, margin_left_val):
    # 先創(chuàng)建一個(gè)空字符串
    html = ""
    # 對(duì)傳入的字典進(jìn)行循環(huán)操作
    for k, v_dic in sub_comment_dic.items():
        html += "<div style='margin-left:%spx'><span class='nickname'>" % margin_left_val + k.name + "</span>" + "<time class='submit-date'>" + str(k.created_time.strftime('%Y-%m-%d %H:%M:%S')) + "<div class='text'>" + k.text + '</div></div><hr>'
        # html += "<div style='margin-left:%spx' class='comment-node'>" % margin_left_val + k.text + "</div>"
        # 有可能v_dic中依然有元素, 遞歸繼續(xù)加
        if v_dic:
            html += generate_comment_html(v_dic, margin_left_val+35)
    # 循環(huán)完成最后返回html
    return html

# 生成層級(jí)評(píng)論
@register.simple_tag
def build_comment_tree(comment_list):
    # 定義一個(gè)空字典用來(lái)保存轉(zhuǎn)換之后的結(jié)果
    comment_dic = {}
    # 對(duì)comment_list中的每個(gè)元素進(jìn)行循環(huán)
    for comment_obj in comment_list:
        # 判斷comment_obj是否存在父節(jié)點(diǎn)。如果沒(méi)有,這把該評(píng)論作為第一個(gè)節(jié)點(diǎn)
        if comment_obj.parent_comment is None:
            comment_dic[comment_obj] = {}
        else:
            # 否則去找該對(duì)象的父節(jié)點(diǎn)。
            find_father(comment_dic, comment_obj)

    # 上面執(zhí)行完畢,comment_dic中會(huì)有轉(zhuǎn)換好的結(jié)果
    # 開(kāi)始拼接html字符串
    html = "<ul class='comment-list list-unstyled'>"
    # 規(guī)定一個(gè)margin left,每次有遞歸的時(shí)候就往右縮進(jìn)一點(diǎn)。
    margin_left = 0
    # 對(duì)comment_dic中的每一組元素進(jìn)行操作
    for k,v in comment_dic.items():
        # 第一層html
        html += "<li class='comment-item'><span class='nickname'>" + k.name + "</span>" + "<time class='submit-date'>" + str(k.created_time.strftime('%Y-%m-%d %H:%M:%S')) + "<div class='text'>" + k.text + '</div></li>'
        # 通過(guò)遞歸把他的兒子加上
        html += generate_comment_html(v, margin_left+35)
    # 最后把ul關(guān)上
    html += " </ul>"
    # 關(guān)掉轉(zhuǎn)義
    return mark_safe(html)

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

為盈江等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及盈江網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作、盈江網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

網(wǎng)頁(yè)名稱(chēng):多級(jí)評(píng)論的實(shí)現(xiàn)-創(chuàng)新互聯(lián)
URL標(biāo)題:http://muchs.cn/article42/pihhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)網(wǎng)站排名企業(yè)建站、服務(wù)器托管、標(biāo)簽優(yōu)化、網(wǎng)站營(yíng)銷(xiāo)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化