1. 程式人生 > >網站搭建 (第19天) 標簽功能

網站搭建 (第19天) 標簽功能

return html 一個 class a line www rfi tro 字段

一、前言

  在逛開源中國社區的時候,發現每一篇博客下面都有一行文章的標簽,大概就是文章中的代碼類型以及使用到的模塊之類的。如下圖,我的開源中國社區地址是:https://my.oschina.net/zhenfei,用了一段時間後廢棄了,轉到了博客園,所以上面的文章是不全的。

技術分享圖片

  轉而想到自己的網站,我也想添加一個這樣的功能。那麽在Django中,非常輕松地就能通過ManyToManyField字段來將文章與標簽相互關聯。先看一個官方文檔的例子來說明下:

@python_2_unicode_compatibleclass Publication(models.Model):
    title = models.CharField(max_length=30) 
       
    def __str__(self):        
        return self.title


@python_2_unicode_compatibleclass Article(models.Model):
    headline = models.CharField(max_length=100)
    publications = models.ManyToManyField(Publication, related_name=‘publications_article‘)    
    
    def __str__(self):        
        return self.headline

  使用shell簡單地演示一下:

# 創建出版商
In [4]: p1 = Publication.objects.create(title=‘hello‘)

# 創建文章
In [5]: a1 = Article.objects.create(headline=‘django‘)

# 此時出版商和文章還沒有對應添加到 publication_article 表中,獲取為空
In [6]: p1.publications_article.all()
Out[6]: <QuerySet []>

In [7]: p1.publications_article.add(a1)

# 獲取此出版商出版的文章
In [8]: p1.publications_article.all()
Out[8]: <QuerySet [<Article: django>]>

# 獲取出版此文章的出版商
In [9]: a1.publications.all()
Out[9]: <QuerySet [<Publication: hello>]>

  下面就開始在自己網站中實現這一功能。

二、開發流程

1.新建Tag模型類

from django.db import models

class Tag(models.Model):
    """
    標簽 Tag 也比較簡單,和 Category 一樣。
    再次強調一定要繼承 models.Model 類!
    """
    name = models.CharField(max_length=100, verbose_name=u‘標簽‘)

    class Meta:
        verbose_name = ‘標簽‘
        verbose_name_plural = ‘標簽‘

    def __str__(self):

        return self.name

2.通過ManyToManyField將文章與標簽關聯

  在文章Post模型類中,加上

tags = models.ManyToManyField(Tag, blank=True, verbose_name=u‘標簽‘, related_name=‘tag_post‘)

3.將Tag模型類註冊在xadmin中

import xadmin
from .models import Tag

class TagAdmin(object):
    """
        作用:自定義標簽管理工具
        admin.ModelAdmin:繼承admin.ModelAdmin類
    """
    # 在後臺顯示od值,標簽名
    list_display = [‘id‘, ‘name‘]
    # 增加過濾框,且以文章分類作過濾器
    list_filter = [‘name‘]
    # 增加文章標題搜索字段
    search_fields = [‘name‘]
    # 後臺管理每頁顯示20篇文章標題


xadmin.site.register(Tag, TagAdmin)

4.定義一個模板標簽

  具體使用方法,請參考:Django框架13: 自定義過濾器和標簽。

from django import template

register = template.Library()

@register.simple_tag
def get_post_tags(obj):
    """
    獲取文章下的所有標簽
    :param post: 博客
    :return: 標簽列表
    """
    tags_list = obj.tags.all()
    return tags_list

5.最後在網頁模板中加載

  具體的CSS我這裏省略了,比較簡單。

{% get_post_tags post as tags_list %}
{% if tags_list %}
    <div class="blog-tags">
        {% for tag in tags_list %}
            <span>{{ tag }}</span>
        {% endfor %}
    </div>
{% endif %}

?  這就算完成了,在後臺添加好標簽。最後展示如下:

技術分享圖片

  原文出處:https://jzfblog.com/detail/127,文章的更新編輯以此鏈接為準。歡迎關註源站文章!

網站搭建 (第19天) 標簽功能