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 基本能从前干到后

