新手指南:在 Django 中實作標籤功能

更新日期: 2025 年 1 月 27 日

標籤(Tags)是一個方便的功能,可以幫助使用者對內容進行分類與篩選,例如在部落格文章中標記「Django」、「Python」或「Web Development」。

本文將以實際範例,教你如何透過 django-taggit 套件在 Django 專案中實作標籤功能。

無論是初學者還是有經驗的開發者,都能依照這篇教學快速完成標籤系統。


安裝與設定環境

安裝 django-taggit

首先,使用以下指令安裝 django-taggit 套件:

pip install django-taggit

settings.py 中啟用套件

taggit 加入 INSTALLED_APPS

# settings.py
INSTALLED_APPS = [
    ...,
    'taggit',
]

建立模型(Models)

在範例中,我們會建立一個名為 Article 的模型,並加入標籤功能:

# models.py
from django.db import models
from taggit.managers import TaggableManager

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    tags = TaggableManager()  # 加入標籤功能

    def __str__(self):
        return self.title

更新資料庫

執行以下指令以建立資料庫遷移檔並套用變更:

python manage.py makemigrations
python manage.py migrate

在管理後台顯示標籤模型

讓我們設定 Django 管理後台,方便對 Article 模型進行管理:

# admin.py
from django.contrib import admin
from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title',)

建立表單(Forms)

為了讓使用者能輸入標籤,我們需要一個對應的表單:

# forms.py
from django import forms
from .models import Article

class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        fields = ['title', 'content', 'tags']

建立檢視與範本(Views & Templates)

創建文章檢視

我們會建立一個檢視函式,允許使用者新增文章並輸入標籤:

# views.py
from django.shortcuts import render, redirect
from .forms import ArticleForm

def create_article(request):
    if request.method == 'POST':
        form = ArticleForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('article_list')  # 重定向至文章列表
    else:
        form = ArticleForm()
    return render(request, 'create_article.html', {'form': form})

創建範本

新增對應的範本檔案 templates/create_article.html

<h2>Create New Article</h2>
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Create</button>
</form>

查詢特定標籤的文章

篩選標籤文章的檢視

我們可以撰寫一個檢視函式,根據標籤名稱篩選文章:

# views.py
from .models import Article

def articles_by_tag(request, tag_name):
    articles = Article.objects.filter(tags__name__in=[tag_name])
    return render(request, 'articles_by_tag.html', {'articles': articles, 'tag': tag_name})

對應的範本

建立範本檔案 templates/articles_by_tag.html

<h2>Articles with tag: {{ tag }}</h2>
{% for article in articles %}
    <h3>{{ article.title }}</h3>
    <p>{{ article.content }}</p>
{% endfor %}

設定 URL 路由

將檢視函式與範本綁定至 URL:

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('create/', views.create_article, name='create_article'),
    path('tag/<str:tag_name>/', views.articles_by_tag, name='articles_by_tag'),
]

使用標籤範例

完成上述設定後,使用者可以:

  1. 在文章表單中輸入自訂標籤,例如:Django, Python, Web Development
  2. django-taggit 會自動建立這些標籤,並將其存入資料庫中。
  3. 瀏覽特定標籤的文章,篩選結果將自動顯示。

結語

透過以上步驟,我們成功在 Django 專案中整合了標籤功能。

django-taggit 提供了簡單易用的工具,讓開發者能快速為內容分類與篩選,提升應用程式的可用性與用戶體驗。

希望這篇教學對你有所幫助,現在就開始打造你的標籤系統吧!

Similar Posts