You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django评论系统开发问题:表单配置与路由请求报错排查

Django评论系统表单配置及错误修复方案

1. 解决"Request not found"错误

你看到的错误URL http://127.0.0.1:8000/%7Burl%20'add_review'%20dish.id%7D 是因为模板中的URL标签未被正确解析,直接当成字符串传递了。修正方法如下:

修正HTML表单的action属性

将表单的action改为Django模板URL标签,确保指向正确的提交接口:

<form action="{% url 'add_review' dish.id %}" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <p><input type="submit" value="Add comment"></p>
</form>

注意:

  • 渲染index.html时,必须将对应的dish实例传入模板上下文(比如在视图中通过get_object_or_404获取后,用render(request, 'index.html', {'dish': dish})传递)
  • 确保{% url %}标签的语法正确,没有拼写错误

2. 完善视图逻辑

当前AddReview视图存在两个核心问题:未关联评论到具体菜品、未处理重复提交风险。修改后的代码如下:

from django.shortcuts import get_object_or_404, redirect
from .models import Reviews, Dish

class AddReview(View):
    """评论提交视图"""
    def post(self, request, pk):
        form = ReviewForm(request.POST)
        # 根据URL中的pk获取对应的菜品对象
        dish = get_object_or_404(Dish, pk=pk)
        
        if form.is_valid():
            review = form.save(commit=False)
            # 将评论关联到当前菜品(假设Reviews模型的外键字段名为dish,需根据你的模型调整)
            review.dish = dish
            review.save()
        
        # 处理完成后重定向,避免刷新页面重复提交
        return redirect('index')  # 替换为你的首页或菜品详情页的URL名称

3. 检查模型关联

确保Reviews模型包含指向Dish的外键字段,示例如下:

from django.db import models

class Reviews(models.Model):
    dish = models.ForeignKey(Dish, on_delete=models.CASCADE, related_name='reviews')
    name = models.CharField(max_length=100)
    email = models.EmailField()
    text = models.TextField()
    # 可添加其他字段,如创建时间等

4. 模板中渲染评论列表

如果需要在页面展示已有评论,可在index.html中添加遍历逻辑:

<h1 style="margin:0 57%">Reviews</h1>
{% for review in dish.reviews.all %}
    <div style="margin: 1rem 0; padding: 1rem; border: 1px solid #eee;">
        <h4>{{ review.name }}</h4>
        <p>{{ review.text }}</p>
    </div>
{% empty %}
    <p>暂无评论,快来写下第一条吧!</p>
{% endfor %}

内容的提问来源于stack exchange,提问作者Eralife7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:15:35