Python中如何使用Django模板系统实现评论功能?

评论 主要是层级关系 感觉用模板语言写不出来 还是我水平不够 望指教 谢谢


Python中如何使用Django模板系统实现评论功能?
9 回复

写 js 吧


核心思路:在Django中实现评论功能,关键在于建立评论模型、创建表单、处理视图逻辑,并在模板中渲染。下面是一个完整的实现示例。

1. 创建评论模型(models.py

from django.db import models
from django.contrib.auth.models import User

class Comment(models.Model):
    post = models.ForeignKey('Post', on_delete=models.CASCADE, related_name='comments')
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        return f'Comment by {self.author} on {self.post}'

2. 创建评论表单(forms.py

from django import forms
from .models import Comment

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ['content']
        widgets = {
            'content': forms.Textarea(attrs={'rows': 3, 'placeholder': '写下你的评论...'})
        }

3. 处理评论的视图(views.py

from django.shortcuts import render, get_object_or_404, redirect
from .models import Post, Comment
from .forms import CommentForm

def post_detail(request, post_id):
    post = get_object_or_404(Post, id=post_id)
    comments = post.comments.all()
    
    if request.method == 'POST':
        form = CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.post = post
            comment.author = request.user
            comment.save()
            return redirect('post_detail', post_id=post.id)
    else:
        form = CommentForm()
    
    return render(request, 'blog/post_detail.html', {
        'post': post,
        'comments': comments,
        'form': form
    })

4. 模板文件(post_detail.html)

<!-- 显示文章内容 -->
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>

<!-- 显示现有评论 -->
<h3>评论 ({{ comments.count }})</h3>
{% for comment in comments %}
    <div class="comment">
        <strong>{{ comment.author }}</strong>
        <small>{{ comment.created_at|date:"Y-m-d H:i" }}</small>
        <p>{{ comment.content }}</p>
    </div>
{% empty %}
    <p>还没有评论,快来抢沙发吧!</p>
{% endfor %}

<!-- 评论表单 -->
{% if user.is_authenticated %}
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">提交评论</button>
    </form>
{% else %}
    <p>请<a href="{% url 'login' %}">登录</a>后发表评论</p>
{% endif %}

5. URL配置(urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('post/<int:post_id>/', views.post_detail, name='post_detail'),
]

总结建议:按照这个流程就能实现基础的评论功能。

想知道层次关系是怎样的

不建议用 django 的模版系统写复杂的前端 第一前后端分离是趋势 第二是这个模版系统也很鸡肋 干脆就做成前后端分离

可以,关键是体验不好,每次都要在后端渲染网页返回给前端,页面刷新才能看到。

建议你还是学个前端框架比较容易的 vue 之类的。哪怕是最基础的 bootstrap 也可以实现你要的这个样式,最起码把 jquery 和 ajax 要搞明白了,不然你根本做不了 web 开发。

T T 准备学 vue 了

bootstrap jQuery ajax 都学了 只是没有思路 不知道怎么下手

推荐你看一本书《 Django By Example 》

Django 开发的基本不是大项目,会点 bootstrap + jquery 基本能从前干到后

回到顶部