Django - 评论
Django - 评论框架
Section titled “Django - 评论框架”重要提示: 内置的 django.contrib.comments 框架,曾是 Django 核心的一部分,在 Django 1.6 中已弃用 (deprecated),并在 Django 1.8 中完全移除 (removed)。它不再包含在 Django 中。
虽然原始框架已不存在,但对评论系统的需求依然存在。你有以下几个选择:
- 使用第三方包 (Third-Party Package):社区维护着一个名为
django-contrib-comments的包,它提供了与旧框架类似的功能。这通常是搭建一个熟悉的评论系统最简单的方式。 - 使用外部服务 (External Service):集成一个托管评论平台,如 Disqus 或 Commento。这些服务会为你处理评论后端,通常能简化设置和管理(审核)。
- 自行构建 (Build Your Own):对于特定需求或需要完全控制,你可以使用 Django 模型、表单 (forms) 和视图 (views) 构建自定义评论系统。这提供了最大的灵活性,但需要更多的开发工作量。
使用 django-contrib-comments(第三方包)
Section titled “使用 django-contrib-comments(第三方包)”本节演示如何使用流行的 django-contrib-comments 包,它复制了旧框架的功能。
- 安装:
pip install django-contrib-comments- 配置 (
settings.py):
# 将 'django_comments' 和 'django.contrib.sites' 添加到 INSTALLED_APPSINSTALLED_APPS = [ # ... 其他应用 'django.contrib.sites', 'django_comments', 'myapp', # 你的应用,包含你希望添加评论的模型 # ...]
# 添加 SITE_ID 设置。sites 框架需要此项。# 通常,1 用于主站点。SITE_ID = 1如果你的 Django 项目服务于多个网站,django.contrib.sites 框架允许将数据(如评论)与特定的“站点”关联。对于单个站点,设置 SITE_ID = 1 是标准做法。
- 数据库迁移:
# 创建评论和站点所需的数据库表python manage.py migrate- 包含 URL (
urls.py):
# 在你的主项目 urls.py 中(例如,myproject/urls.py)from django.contrib import adminfrom django.urls import path, include
urlpatterns = [ path('admin/', admin.site.urls), path('myapp/', include('myapp.urls')), # 你的应用的 URL path('comments/', include('django_comments.urls')), # 添加评论应用的 URL]- 在模板中使用评论:
假设你有一个 myapp.models.Article 模型,并希望在其详情页 (article_detail.html) 添加评论。
from django.shortcuts import render, get_object_or_404from .models import Article
def article_detail_view(request, pk): article = get_object_or_404(Article, pk=pk) return render(request, 'myapp/article_detail.html', {'article': article}){% extends "base.html" %}{% load comments %}
{% block title %}{{ article.title }}{% endblock %}
{% block content %} <h1>{{ article.title }}</h1> <p>{{ article.content }}</p>
<hr> <h2>评论</h2>
{# 显示评论数量 #} {% get_comment_count for article as comment_count %} <p>这篇文章有 {{ comment_count }} 条评论。</p>
{# 显示评论表单 #} <h3>发表评论:</h3> {% render_comment_form for article %}
{# 显示评论列表 #} <h3>现有评论:</h3> {% render_comment_list for article %}
{% endblock %}模板标签说明:
{% load comments %}: 加载所需的模板标签。{% get_comment_count for [object] as [varname] %}: 获取指定模型实例(此处为article)的评论数量,并将其存储在comment_count变量中。{% render_comment_form for [object] %}: 渲染用于发表与对象相关的评论的默认表单。{% render_comment_list for [object] %}: 渲染与对象关联的已批准评论列表。
完成设置后,访问文章详情页将显示评论数量、评论表单以及任何已有的评论。
管理与自定义
Section titled “管理与自定义”django-contrib-comments 支持评论管理 (moderation)(评论显示前需要批准)、电子邮件通知以及表单和模板的自定义。有关这些高级功能的详细信息,请参阅该包的官方文档。
如果 django-contrib-comments 不符合你的需求:
- Disqus/Commento: 易于集成,将评论的托管和管理卸载到外部服务。通常包括社交登录、高级管理和分析等功能。可能需要用户与第三方服务进行交互。
- 自行构建: 在 Django 中创建一个
Comment模型,使用ForeignKey指向其关联的内容类型(使用django.contrib.contenttypes),并可能关联一个用户。构建表单和视图来处理创建和显示。提供完全控制,但需要时间。
根据你的项目需求,选择最能平衡易用性、所需功能和开发资源的方法。
延伸阅读:
django-contrib-comments文档:https://django-contrib-comments.readthedocs.io/- Django ContentTypes 框架:https://docs.djangoproject.com/en/stable/ref/contrib/contenttypes/(对于自行构建系统很有用)