成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Django搭建個(gè)人博客:設(shè)置文章的欄目

keelii / 1362人閱讀

摘要:而文章分類一個(gè)重要的途徑就是設(shè)置欄目。修改文件欄目的欄目標(biāo)題創(chuàng)建時(shí)間文章欄目的一對(duì)多外鍵欄目的有兩個(gè)字段,名稱和創(chuàng)建日期。修改文章的欄目功能,也就完成了。對(duì)個(gè)人博客來說,欄目數(shù)據(jù)的變動(dòng)通常是很少的。

博客的文章類型通常不止一種:有時(shí)候你會(huì)寫高深莫測(cè)的技術(shù)文章,有時(shí)候又純粹只記錄一下當(dāng)天的心情。

因此對(duì)文章的分類就顯得相當(dāng)?shù)闹匾?,既方便博主?duì)文章進(jìn)行分類歸檔,也方便用戶有針對(duì)性的閱讀。

而文章分類一個(gè)重要的途徑就是設(shè)置欄目。

欄目的模型

實(shí)現(xiàn)文章欄目功能的方法有多種。你可以只是簡(jiǎn)單的在文章的Model中增加CharField()字段,以字符串的形式將欄目名稱保存起來(實(shí)際上這種實(shí)現(xiàn)更像是“標(biāo)簽”,以后會(huì)講到)。這樣做的優(yōu)點(diǎn)是比較簡(jiǎn)單;缺點(diǎn)也很明顯,就是時(shí)間長(zhǎng)了你可能會(huì)記混欄目的名字,并且也不方便對(duì)欄目的其他屬性進(jìn)行擴(kuò)展。

因此對(duì)文章欄目可以獨(dú)立為一個(gè)Model,用外鍵與文章的Model關(guān)聯(lián)起來。

修改article/modles.py文件:

article/models.py

...

class ArticleColumn(models.Model):
    """
    欄目的 Model
    """
    # 欄目標(biāo)題
    title = models.CharField(max_length=100, blank=True)
    # 創(chuàng)建時(shí)間
    created = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.title


class ArticlePost(models.Model):
    ...

    # 文章欄目的 “一對(duì)多” 外鍵
    column = models.ForeignKey(
        ArticleColumn,
        null=True,
        blank=True,
        on_delete=models.CASCADE,
        related_name="article"
    )
    
    ...

欄目的Model有兩個(gè)字段,“名稱”和“創(chuàng)建日期”。

一篇文章只有一個(gè)欄目,而一個(gè)欄目可以對(duì)應(yīng)多篇文章,因此建立“一對(duì)多”的關(guān)系。

寫好模型后記得用makemigrationsmigrate指令遷移數(shù)據(jù)。

列表中顯示欄目 添加測(cè)試數(shù)據(jù)

模型寫好之后就需要幾條欄目的數(shù)據(jù)來進(jìn)行測(cè)試。由于還沒有寫視圖,因此需要善加利用Django自帶的后臺(tái)。

首先把欄目模型注冊(cè)到后臺(tái):

article/admin.py

...

from .models import ArticleColumn

# 注冊(cè)文章欄目
admin.site.register(ArticleColumn)

然后就可以在后臺(tái)中添加欄目的數(shù)據(jù)條目了:

先隨便添加了“HTML”、“Java”、“Django”這3條。

在后臺(tái)中隨便打開一篇文章,“欄目”字段已經(jīng)靜靜的在等你了:

隨機(jī)找?guī)灼恼略O(shè)置不同的欄目用于測(cè)試。

重寫文章列表

之前我們用卡片類型的UI界面展示文章列表。

卡片的好處是簡(jiǎn)潔大方,但是隨著數(shù)據(jù)的增多,卡片小小的版面已經(jīng)不堪重負(fù)了。

因此這里重寫list.html模板的列表循環(huán):

article/list.html

...


{% for article in articles %}
{% if article.column %} {% endif %}

{{ article.title }}

{{ article.body|slice:"100" }}...

{{ article.total_views }} 瀏覽    {{ article.created|date:"Y-m-d" }} 發(fā)布    {{ article.updated|date:"Y-m-d" }} 更新


{% endfor %}
...

最主要的改動(dòng)就是新增了展現(xiàn)“欄目”的按鈕。我們甚至還為不同的欄目設(shè)置了不同的按鈕顏色。

在附加信息中順便還把之前沒有用到的日期信息也添加上去了。

來看看效果:

感覺還不錯(cuò)!

修改寫文章功能

展示已經(jīng)沒問題了,但是發(fā)表新文章時(shí)還不能選擇欄目。

修改寫文章的模板,在表單中新增下面的內(nèi)容:

templates/article/create.html

...


{% csrf_token %} ...
... ...

{% for column in columns %} {% endfor %}

... ... ...

與前面稍有不同的是,表單中判斷了column.idarticle.column.id是否相等,如果相等則將其設(shè)置為默認(rèn)值。

然后修改視圖函數(shù):

article/views.py

# 更新文章
...
def article_update(request, id):
    ...

    # 判斷用戶是否為 POST 提交表單數(shù)據(jù)
    if request.method == "POST":
        ...
        if article_post_form.is_valid():
            ...

            # 新增的代碼
            if request.POST["column"] != "none":
                article.column = ArticleColumn.objects.get(id=request.POST["column"])
            else:
                article.column = None

            ...

    else:
        ...

        # 新增及修改的代碼
        columns = ArticleColumn.objects.all()
        context = { 
            "article": article, 
            "article_post_form": article_post_form,
            "columns": columns,
        }

        ...

代碼邏輯與前面很類似。修改文章的欄目功能,也就完成了。

總結(jié)

本章實(shí)現(xiàn)了簡(jiǎn)單的欄目功能,可以舒舒服服對(duì)文章進(jìn)行分類了,強(qiáng)迫癥福音啊。

還有些可以完善的工作,比如:

單擊欄目按鈕顯示所有相同欄目的文章。這個(gè)功能與之前學(xué)過的最熱文章排序以及搜索文章非常的類似。還記得filter()方法嗎?

欄目Model的增刪改查。

對(duì)個(gè)人博客來說,欄目數(shù)據(jù)的變動(dòng)通常是很少的。如果你不想寫增刪改查,用后臺(tái)修改數(shù)據(jù)是完全可以的。

以上內(nèi)容就不再贅述了。留給讀者去嘗試實(shí)現(xiàn)。

有疑問請(qǐng)?jiān)诙刨惖膫€(gè)人網(wǎng)站留言,我會(huì)盡快回復(fù)。

或Email私信我:[email protected]

項(xiàng)目完整代碼:Django_blog_tutorial

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43103.html

相關(guān)文章

  • Django搭建個(gè)人博客文章標(biāo)簽功能

    摘要:每一篇文章的標(biāo)簽可能都不一樣,并且還可能擁有多個(gè)標(biāo)簽,這是與欄目功能不同的。列表中顯示標(biāo)簽雖然保存標(biāo)簽的功能已經(jīng)實(shí)現(xiàn)了,還得把它顯示出來才行。更多的用法請(qǐng)閱讀官方文檔總結(jié)本章學(xué)習(xí)了使用來完成標(biāo)簽功能。 標(biāo)簽是作者從文章中提取的核心詞匯,其他用戶可以通過標(biāo)簽快速了解文章的關(guān)注點(diǎn)。每一篇文章的標(biāo)簽可能都不一樣,并且還可能擁有多個(gè)標(biāo)簽,這是與欄目功能不同的。 好在標(biāo)簽功能也有優(yōu)秀的三方庫(kù):D...

    Amio 評(píng)論0 收藏0
  • Django搭建個(gè)人博客:結(jié)束和開始

    摘要:教程看到這里,你已經(jīng)學(xué)會(huì)如下內(nèi)容搭建開發(fā)環(huán)境博文管理用戶管理發(fā)表評(píng)論若干小功能搭建簡(jiǎn)單的小博客,以上的功能夠用了。教程為了起步平緩,沒有展開這方面的內(nèi)容。陌生人,祝你學(xué)業(yè)進(jìn)步事業(yè)有成歡迎常到杜賽的個(gè)人網(wǎng)站做客 教程看到這里,你已經(jīng)學(xué)會(huì)如下內(nèi)容: 搭建開發(fā)環(huán)境 博文管理 用戶管理 發(fā)表評(píng)論 若干小功能 搭建簡(jiǎn)單的小博客,以上的功能夠用了。 相信你的志向不止于此。畢竟程序員面試個(gè)個(gè)造火...

    zqhxuyuan 評(píng)論0 收藏0
  • Django搭建個(gè)人博客:用django-allauth實(shí)現(xiàn)第三方登錄

    摘要:比較流行的解決方案是允許用戶通過第三方登錄,即可以通過微博這類知名社區(qū)的授權(quán),從而登錄你的小站,免去了注冊(cè)的麻煩。微博微信的登錄方式大致都遵循這個(gè)流程本章雖然加載了微博的接口,但是限于篇幅并沒有配置,請(qǐng)讀者查閱官方文檔去實(shí)現(xiàn)。 現(xiàn)在我們已經(jīng)擁有一個(gè)可以進(jìn)行用戶本地登錄的博客系統(tǒng)了。如果有人欣賞你的文章,說不定就會(huì)注冊(cè)成為本地用戶,并和你好好交流一番。 但頭疼的是,用戶可能每天都在互聯(lián)網(wǎng)...

    waruqi 評(píng)論0 收藏0
  • 使用 django-blog-zinnia 搭建個(gè)人博客

    摘要:語法支持再次打開文件,在文件的最后添加指明了使用語法標(biāo)記,做了兩個(gè)拓展,其中表示支持語法高亮,包含的特性請(qǐng)參見相關(guān)文檔。語法高亮支持注意這一步必須在安裝完主題之后。 目前網(wǎng)上搭建個(gè)人博客的方案很多,雖然使用諸如 Wordpress ( PHP )、Hexo ( Node.js ) 等可以方便快速地搭建一款功能齊全的高性能個(gè)人博客,但是本文將嘗試一種更為小眾化的方案 —— 一款基于 dj...

    褰辯話 評(píng)論0 收藏0
  • Django搭建個(gè)人博客文章分頁

    摘要:隨著時(shí)間的推移加上勤奮的寫作,你的博客文章一定會(huì)越來越多。如果不進(jìn)行處理,可能同一個(gè)頁面會(huì)擠上成百上千的文章,不美觀不說,還降低了頁面的反應(yīng)速度。這個(gè)時(shí)候就需要對(duì)文章進(jìn)行分頁的處理。有疑問請(qǐng)?jiān)诙刨惖膫€(gè)人網(wǎng)站留言,我會(huì)盡快回復(fù)。 隨著時(shí)間的推移(加上勤奮的寫作?。愕牟┛臀恼乱欢〞?huì)越來越多。如果不進(jìn)行處理,可能同一個(gè)頁面會(huì)擠上成百上千的文章,不美觀不說,還降低了頁面的反應(yīng)速度。 這個(gè)時(shí)...

    stormgens 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<