Django筆記09-文章詳情頁(yè)(1)

文章詳情頁(yè)

文章詳情頁(yè)中顯示文章的所有詳細(xì)信息

模板文件

?之前下載的博客模板中线得,找到article.html文件够话,將其復(fù)制到templates/blog/目錄中蓝翰。

$ cp article.html ~/fbckf/templates/blog/
image
<!-- blog-content -->
    <div class="container content">
      <div class="row justify-content-center">
        <div class="col-8">
          <div class="blog-header">
            <h1 class="blog-title"><strong>{{ article.title }}</strong></h1>
            <p class="blog-post-meta ">January 1, 2018 by <a href="#">{{ article.author }}</a></p>
          </div>
          <div class="blog-post border-bottom">
            {{ article.body | safe }}
            <img src="{% static 'blog/img/3.jpg' %}" style="width: 100%;">
          </div>
          <!-- 判斷用戶是否登陸,沒(méi)有登陸無(wú)法點(diǎn)贊和評(píng)論 -->
          {% if username %}
          <div class="center">

            <button class="btn btn-outline-dark btn-lg" type="button" data-toggle="collapse" href="#post-comment" role="button" aria-expanded="false" aria-controls="post-comment">
              <i class="fa fa-comment-o" aria-hidden="true"></i> 評(píng)論</button>
            <button type="button" class="btn btn-lg btn-outline-danger" data-toggle="body" data-content="您是第 {{ article.likes }} 位喜歡這篇文章的讀者女嘲!">
              <i class="fa fa-heart-o" aria-hidden="true"></i>  喜歡
            </button>
            <div class="collapse" id="post-comment">
              <form action="#">
                <div class="form-group">
                <textarea name="comment" id="input-comment" cols="30" rows="5" class="form-control"></textarea>    
              </div>
              <button class="btn btn-outline-dark" type="submit">發(fā)送</button>
              </form>     
            </div>    
          </div>
          {% endif %}
          <div class="comment-list">

            <div class="comment-detail">
              <div class="row justify-content-start">
                <img src="{% static 'blog/img/carousel2.jpg' %}" class="rounded" alt="user" style="width: 50px; height: 50px;">
                <p class="lead col"> fbckf</p>
              </div> 
              <div class="row justify-content-end"> 
                <p class="col-11">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cupiditate velit, nam quo eveniet repellendus numquam, labore, fugit incidunt dicta enim perspiciatis et ab. Provident maiores non suscipit earum explicabo dolorum?</p>           
              </div>
              <div class="row justify-content-end">
                <ul class="list-group list-group-flush col-11" >
                  <li class="list-group-item">
                   <div class="row justify-content-start">
                    <img src="{% static 'blog/img/carousel2.jpg' %}" class="rounded" alt="user" style="width: 50px; height: 50px;">
                     <p class="lead col"> fbckf</p>
                    </div> 
                    <div class="row justify-content-end"> 
                      <p class="col-11">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cupiditate velit, nam quo eveniet repellendus numquam, labore, fugit incidunt dicta enim perspiciatis et ab. Provident maiores non suscipit earum explicabo dolorum?</p>
                    </div>
                  </li>
                </ul>
              </div>
            </div>

            </div>
          </div>
        </div>
      </div>     
    </div>

?以上和之前修改首頁(yè)模板時(shí)差不多畜份,不過(guò)要注意的一點(diǎn)是 {{ article.body | safe }}標(biāo)簽中的 safe。django會(huì)將文章內(nèi)容強(qiáng)制轉(zhuǎn)義澡为,所以有時(shí)會(huì)造成一些麻煩漂坏,加上 safe 表示該內(nèi)容安全,不需要轉(zhuǎn)義媒至。

添加 url 規(guī)則

# blog/urls.py

from django.urls import path
from . import views

app_name = 'blog'
urlpatterns = [
    path('', views.index, name='index'),
    path('search/', views.search , name='search'),
    # 添加文章詳情頁(yè) url 規(guī)則
    path('article/<slug>/', views.article, name='article'),
]

?path() 中的第一個(gè)參數(shù)與之前又有不同,'<slug>' 中表示的是字符谷徙,在點(diǎn)擊文章的Read more按鈕后會(huì)訪問(wèn) 127.0.0.1:8000/article/[文章名]/ 這個(gè) url拒啰, 之后會(huì)將文章名保存變量 slug 中。具體的可以查看官方文檔完慧。

添加視圖函數(shù)

# blog/views.py
...
def article(request, slug):
    context = {}
    # 根據(jù) slug 的值獲取文章
    article = Article.objects.get(title=slug)
    context['article'] = article
    if request.user.is_authenticated:
        context['username']= request.user.username
    return render(request, 'blog/article.html', context=context)

?要注意一點(diǎn)谋旦,這里是使用文章的 title 字段來(lái)獲取文章,所以模型的 title 字段必須具有唯一性屈尼,比如之前設(shè)在的 unique-True册着。

?完成之后,在首頁(yè)點(diǎn)擊文章的 Read more 按鈕就會(huì)跳轉(zhuǎn)到那篇文章的詳情頁(yè)中脾歧。

點(diǎn)贊功能

?當(dāng)用戶點(diǎn)擊喜歡按鈕后甲捏,會(huì)彈出 “對(duì)話氣泡” 框,里面提示喜歡人數(shù)

添加視圖函數(shù)

?每次點(diǎn)擊時(shí)鞭执,文章的 likes 字段值加一

# blog/views.py
def like_article(request):
    article_title = None
    # 判斷是否時(shí) get 模式
    if request.method == "GET":
        article_title = request.GET['article_title']
    article = Article.objects.get(title=article_title)
    # 獲取到文章對(duì)象后司顿,更新 likes 字段的值
    if article:
        article.likes = article.likes + 1
        article.save()
    return HttpResponse(article.likes)

添加 url 規(guī)則

from django.urls import path
from . import views

app_name = 'blog'
urlpatterns = [
    path('', views.index, name='index'),
    path('search/', views.search , name='search'),
    path('article/<slug>/', views.article, name='article'),
    path('like_article/', views.like_article, name='like_article'),
]

修改模板文件

...
<button id="like_article" value="{{ article.title }}" type="button" class="btn btn-lg btn-outline-danger" data-toggle="body" data-content="您是第 {{ article.likes|add:1 }} 位喜歡這篇文章的讀者芒粹!">
    <i class="fa fa-heart-o" aria-hidden="true"></i>  喜歡
</button>
...
  • <button> 標(biāo)簽添加一個(gè) idvalue 屬性

  • id 屬性是為了后面寫(xiě) ajax 準(zhǔn)備的

  • value 的值是文章的標(biāo)題,ajax 將其傳遞到服務(wù)器

  • {{ article.likes|add:1 }} 點(diǎn)擊之后顯示原 likes 的值加一大溜,之后后臺(tái)進(jìn)行更新

ajax

?點(diǎn)擊按鈕之后化漆,通過(guò)使用 ajax 來(lái)異步訪問(wèn) url 進(jìn)行更新字段值。

...
$("#like_article").click(function(){
    var  article_title = $(this).attr("value"); 
    $.get('/like_article/', {article_title:article_title}, function(data){
        $("#like_article").attr('disabled', true);
    });
});
...
  • $.get() 方法第一個(gè)參數(shù)為 url 第二個(gè)參數(shù)是傳遞數(shù)據(jù) 第三個(gè)是函數(shù)钦奋,收到返回結(jié)果之后執(zhí)行的內(nèi)容

  • 傳遞的數(shù)據(jù)會(huì)以get模式傳遞到后臺(tái)

  • 點(diǎn)擊后給按鈕添加 disabled 屬性 防止用戶連續(xù)點(diǎn)擊

?每次打開(kāi)文章頁(yè)面之后座云,如果登陸了賬戶,則可以個(gè)文章點(diǎn)贊付材,但是每個(gè)用戶只能點(diǎn)擊一次疙教。

總結(jié)

?文章頁(yè)的功能還沒(méi)有全部完成,包括 markdown 語(yǔ)法和評(píng)論功能

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伞租,一起剝皮案震驚了整個(gè)濱河市贞谓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌葵诈,老刑警劉巖裸弦,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異作喘,居然都是意外死亡理疙,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)泞坦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)窖贤,“玉大人,你說(shuō)我怎么就攤上這事贰锁≡呶啵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵豌熄,是天一觀的道長(zhǎng)授嘀。 經(jīng)常有香客問(wèn)我,道長(zhǎng)锣险,這世上最難降的妖魔是什么蹄皱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮芯肤,結(jié)果婚禮上巷折,老公的妹妹穿的比我還像新娘。我一直安慰自己崖咨,他們只是感情好锻拘,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著掩幢,像睡著了一般逊拍。 火紅的嫁衣襯著肌膚如雪上鞠。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天芯丧,我揣著相機(jī)與錄音芍阎,去河邊找鬼。 笑死缨恒,一個(gè)胖子當(dāng)著我的面吹牛谴咸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播骗露,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼岭佳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了萧锉?” 一聲冷哼從身側(cè)響起珊随,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎柿隙,沒(méi)想到半個(gè)月后叶洞,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡禀崖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年衩辟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俩莽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片费韭。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡皆愉,死狀恐怖闯参,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情圈澈,我是刑警寧澤咱揍,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布节预,位于F島的核電站折晦,受9級(jí)特大地震影響钥星,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜满着,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贯莺。 院中可真熱鬧风喇,春花似錦、人聲如沸缕探。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)爹耗。三九已至耙考,卻和暖如春谜喊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背倦始。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工斗遏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鞋邑。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓诵次,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親枚碗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逾一,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容