摘要:現(xiàn)在在首頁(yè)我們已經(jīng)可以看到展示的問(wèn)題了,我們?cè)僭O(shè)計(jì)一個(gè)問(wèn)題的詳情頁(yè),通過(guò)點(diǎn)擊問(wèn)題的標(biāo)題進(jìn)去,可以給問(wèn)題添加評(píng)論或者回答。
現(xiàn)在在首頁(yè)我們已經(jīng)可以看到展示的問(wèn)題了,我們?cè)僭O(shè)計(jì)一個(gè)問(wèn)題的詳情頁(yè),通過(guò)點(diǎn)擊問(wèn)題的標(biāo)題進(jìn)去,可以給問(wèn)題添加評(píng)論或者回答。
問(wèn)題的詳情頁(yè)都使用一個(gè)名為"details.html"的模板,其網(wǎng)址我們?cè)O(shè)計(jì)成"/details/
@app.route("/details//") def details(question_id): question_obj = Questions.query.filter(Questions.id == question_id).first() return render_template("details.html", question=question_obj)
這部分代碼也很簡(jiǎn)單,將url的參數(shù)question_id傳遞給函數(shù),函數(shù)用question_id返回一個(gè)question模型的對(duì)象,并將其傳遞給模板,在模板中處理quesiton對(duì)象,包括解析其title/content/author以及對(duì)應(yīng)的comments(在模型部分我們已經(jīng)建立了Questions和Comments的關(guān)系和引用)。為首頁(yè)問(wèn)題的title添加鏈接:
details.html核心代碼(其余部分繼承base.html)如下:
{% block body_part %}{{ question.title }}
作者:{{ question.author.username }} 時(shí)間:{{ question.create_time }}
{{ question.content }}
此時(shí)還沒(méi)有添加評(píng)論功能,我手動(dòng)往數(shù)據(jù)庫(kù)寫(xiě)了一條評(píng)論,來(lái)查看html的效果,如下:
我們?cè)偬砑釉u(píng)論(或者說(shuō)回答)的功能,其實(shí)就是加個(gè)POST表單,和注冊(cè)的邏輯是一樣的,為html增加下面的代碼,放在問(wèn)題和評(píng)論之間:
評(píng)論({{ question.comments | length }}):
這里用了一個(gè)length過(guò)濾器來(lái)獲取comments的數(shù)量。修改detail視圖函數(shù),為其增加POST方法如下:
@app.route("/question/", methods=["GET", "POST"]) def question(): if request.method == "GET": return render_template("question.html") else: if hasattr(g, "user"): question_title = request.form.get("question_title") question_desc = request.form.get("question_desc") author_id = g.user.id new_question = Questions(title=question_title, content=question_desc, author_id=author_id) db.session.add(new_question) db.session.commit() return redirect(url_for("home")) else: flash("請(qǐng)先登錄") return redirect(url_for("login"))
這部分與前面的文章中發(fā)布問(wèn)答的視圖函數(shù)也是很像的,無(wú)需重復(fù)講解,經(jīng)測(cè)試發(fā)布評(píng)論功能以及可以使用了。
最后美化界面如下:
補(bǔ)充:
由于在前文中我們的Comments模型通過(guò)以下代碼和Users/Questions都建立了關(guān)系:
author = db.relationship("Users", backref=db.backref("comments")) question = db.relationship("Questions", backref=db.backref("comments", order_by=create_time.desc()))
我們?cè)谛略?b>comment的時(shí)候,這條代碼:
comment = Comments(content=content, question_id=question_id, author_id=g.user.id)
就可以改成:
comment = Comments(content=content) comment.author = g.user comment.question = Questions.query.filter(Questions.id == question_id).first()
雖然看上去長(zhǎng)了,但可能更容易看出模型之間的關(guān)系了,anyway,兩種方式都是OK的。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41284.html
摘要:創(chuàng)建了數(shù)據(jù)庫(kù)模型就要遷移數(shù)據(jù)庫(kù),遷移數(shù)據(jù)庫(kù)的命令也在前面講過(guò)。如果表單對(duì)應(yīng)有一個(gè)數(shù)據(jù)庫(kù)模型例如這里的評(píng)論表單對(duì)應(yīng)著評(píng)論模型,那么使用類(lèi)會(huì)簡(jiǎn)單很多,這是為我們提供的方便。表明這個(gè)表單對(duì)應(yīng)的數(shù)據(jù)庫(kù)模型是類(lèi)。 創(chuàng)建評(píng)論應(yīng)用 相對(duì)來(lái)說(shuō),評(píng)論其實(shí)是另外一個(gè)比較獨(dú)立的功能。Django 提倡,如果功能相對(duì)比較獨(dú)立的話(huà),最好是創(chuàng)建一個(gè)應(yīng)用,把相應(yīng)的功能代碼寫(xiě)到這個(gè)應(yīng)用里。我們的第一個(gè)應(yīng)用叫 blog...
摘要:在父頁(yè)面中文章詳情模板添加需要執(zhí)行錨點(diǎn)拼接的函數(shù)新增函數(shù),處理二級(jí)回復(fù)去除尾部符號(hào)刷新并定位到錨點(diǎn)函數(shù)中運(yùn)用了的三元運(yùn)算符,翻譯成人話(huà)就是如果成立則返回,如果不成立就返回。 老讀者注意:上一章消息通知有個(gè)bug,即發(fā)給管理員的notify必須移動(dòng)到new_comment.save()的后面,否則會(huì)導(dǎo)致action_object存儲(chǔ)為NULL,并且導(dǎo)致本章的html拼接錨點(diǎn)失效。原文已...
摘要:后面兩個(gè)編輯器自帶,不用單獨(dú)下載,添上就可以了添加相關(guān)插件這樣就完成了代碼高亮效果不錯(cuò)在前臺(tái)使用為了讓用戶(hù)在前臺(tái)也能使用富文本編輯器,還得對(duì)代碼稍加改動(dòng)。對(duì)于有些不喜歡的人來(lái)說(shuō),甚至可以連博文都使用提供的富文本編輯器。 前面我們已經(jīng)實(shí)現(xiàn)了用Markdown語(yǔ)法寫(xiě)文章了。但是文章的評(píng)論用Markdown就不太合適了,你不能強(qiáng)求用戶(hù)也花時(shí)間去熟悉語(yǔ)法啊。另外評(píng)論中通常還有表情、帶顏色的字體...
摘要:如果有什么可以幫到你的無(wú)論是不是此項(xiàng)目中的問(wèn)題都可以在提出我會(huì)盡我所能幫你解決歡迎大佬們提出好的問(wèn)題和點(diǎn)子,我會(huì)第一時(shí)間去修正。 前言 本項(xiàng)目(友租)是基于Vue2、Vuex、Muse-UI、es6、webpack構(gòu)建的一個(gè)移動(dòng)端、PC端輕社區(qū)項(xiàng)目 項(xiàng)目地址GitHub 項(xiàng)目更新歷史 開(kāi)發(fā)環(huán)境 Macos + Vs code + Chrome 項(xiàng)目的靈感最初來(lái)源:由于我是一個(gè)宅男在...
閱讀 1971·2021-10-12 10:12
閱讀 3109·2019-08-30 15:44
閱讀 869·2019-08-30 15:43
閱讀 3015·2019-08-30 14:02
閱讀 2113·2019-08-30 12:54
閱讀 3529·2019-08-26 17:05
閱讀 2021·2019-08-26 13:34
閱讀 1076·2019-08-26 11:54
{# {% for comment in question.comments | sort(attribute="create_time",reverse=true) %} #} {% for comment in question.comments %}-
{{ comment.content }}
{{ comment.author.username }}
{{ comment.create_time }}
{% endfor %}