Django论坛发帖跳转错误及PlantPost不存在问题求助
问题根源
两个核心问题:URL命名空间缺失导致表单提交路由混淆,模板文件命名冲突导致Django加载了错误的模板;另外Comment模型存在重复字段问题。
解决步骤
1. 配置URL命名空间(根urls.py)
在项目根目录的urls.py中,给forum和greenhouse的路由添加命名空间,避免同名URL混淆:
from django.urls import path, include urlpatterns = [ # 其他路由... path('forum/', include(('forum.urls', 'forum'), namespace='forum')), path('greenhouse/', include(('greenhouse.urls', 'greenhouse'), namespace='greenhouse')), ]
2. 修复论坛模板的表单Action路由
- forum/create_post.html:给
create_post添加命名空间前缀,确保提交到论坛的路由:
{% extends "home.html" %} {% block content %} <h2>Create Post</h2> <form action="{% url 'forum:create_post' %}" method="post" enctype="multipart/form-data"> {% csrf_token %} {{ form.as_p }} <button type="submit">Submit</button> </form> {% endblock %}
- 你的
create_comment.html已使用forum:create_comment,命名空间配置完成后即可正常生效。
3. 解决模板命名冲突
Django默认会在所有app的templates目录下查找模板,同名文件会导致加载错误。给每个app的模板创建子目录:
- 将forum的模板移动到
forum/templates/forum/目录下,例如forum/templates/forum/create_post.html、forum/templates/forum/create_comment.html - 修改forum views.py中的渲染路径,指定子目录:
# create_post视图 return render(request, "forum/create_post.html", {"form": form}) # create_comment视图 return render(request, "forum/create_comment.html", {"form": form, "post": post})
greenhouse的模板同理,放到greenhouse/templates/greenhouse/目录下,避免与forum模板冲突。
4. 修复Comment模型的重复字段
forum/models.py中Comment类定义了两次user字段,删除重复项,保留带related_name的版本:
class Comment(models.Model): post = models.ForeignKey(Post, on_delete=models.CASCADE) content = models.TextField() created_at = models.DateTimeField(auto_now_add=True) user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="forum_comments")
5. 优化视图的错误处理
在forum/views.py的create_comment视图中,用get_object_or_404替代get,避免因无效post_id抛出未捕获的异常:
from django.shortcuts import get_object_or_404 def create_comment(request, post_id): post = get_object_or_404(Post, id=post_id) # 后续逻辑不变...
验证
完成以上修改后:
- 论坛发帖会提交到
/forum/create_post/,不再跳转到温室页面 - 评论提交会指向
/forum/create_comment/<post_id>/,调用forum的create_comment视图,不会再触发greenhouse的PlantPost不存在错误
内容的提问来源于stack exchange,提问作者Teppie
相关产品推荐
相关产品推荐

