关于ZAKER 融媒体解决方案 合作 加入

python- 在 Django 1.6 中结合 DetailView 和 CreateView

CocoaChina 11-23

我有 2 个单独的模型 ," 发布 " 和 " 评论 ". 我使用 DetailView 显示帖子内容 , 并且我想使用 CreateView 在同一页面上显示评论创建表单 . 最干净的方法是什么?

唯一想到的是使用自定义视图 , 该视图既获取对象又处理注释表单 , 但这看起来太脏了:

def post_detail ( request, slug ) : post = get_object_or_404 ( Post, slug=slug ) if request.POST: form = CommentForm ( request.POST ) # do comment form processing here return render ( request, "post/post_detail.html", { "object": post, "comment_form": form} )

有没有使用基于类的视图做到这一点的干净方法?还是通过某种方式将帖子显示代码与评论处理代码分离?

最佳答案

一种选择是对帖子使用 DetailView, 并使用 templatetag 显示评论表单 . 让评论表单提交到 Comment CreateView, 然后在成功时重定向到 DetailView.

也就是说 , 如果表格无效 , 可能会有点难看 . 在紧要关头 , 您始终可以从 CreateView 方法之一调用 DetailView 或其方法 . 但是 ,IMO 引入了更多而不是更少的耦合 . 或者 , 您可以有一个单独的实用程序函数 , 如果注释表单有错误 , 可以从 CreateView 调用该函数以显示 Post.

另一种选择是使用 AJAX 处理注释表单 ( 在单独的 CreateView 中 ) , 而不是加载新页面 .

最后 , 无论使用哪种语言或框架 , 一个视图可以解耦一个需要显示一种对象类型并创建另一种对象类型的视图将受到限制 .

以上内容由"CocoaChina"上传发布 查看原文

觉得文章不错,微信扫描分享好友

扫码分享