我希望能够创建一个名为' Comment'的新Django对象。在javascript。
(据我所知,你不能像在视图方法中那样简单地声明一个新对象)
我需要允许用户回复现有评论。
如果用户按下'回复'按下注释,下面会显示一个表单,并在js变量中保存用户想要回复的注释的ID。
然而,我正在努力寻找一种方法来最终提交所有这些,以便我可以发布一个新的子评论。
有没有一种简单的方法可以达到这个目的?
答案 0 :(得分:3)
我会用ajax做到这一点。如果您正在使用jQuery,您可以使用类似的东西:
假设您有一个名为home.html的模板,您可以在其中管理评论和所有内容。
home.html的
<ul class="comments">
<li data-id="1">This is a comment...</li>
</ul>
<textarea id="new_comment"></textarea>
<button type="button" id="send">Post comment!</button>
urls.py
url(r'^comment/$', 'core.views.comment', name='comment'),
views.py
def comment(request):
c = Comment()
c.text = request.GET.get('text')
c.save()
return render(request, 'core/partial_comment.html', { 'comment': c })
芯/ partial_comment.html
<li data-id="{{ comment.id }}">{{ comment.text }}</li>
现在您需要一个jQuery代码段来向服务器发送异步请求,以便您可以创建新的注释:
$(function () {
$("#send").click(function () {
$.ajax({
url: '/comment/',
data: { 'text': $("#new_comment").val() },
type: 'get',
cache: false,
success: function (data) {
$(".comments").append(data);
}
});
});
});
所以,让我们了解刚刚发生的事情:
用户来到ID为new_comment
的textarea上写评论ID为“send”的按钮正在侦听点击事件
当用户点击此按钮时,它会向服务器发送一个ajax请求,其中包含我们称之为“text”的数据。然后,您在服务器上,您可以创建您的Comment对象。保存后,您将响应返回给客户端。 ajax调用中的“data”变量将捕获结果,即“&lt; li data-id =”2“&gt;他所评论的内容......&lt; / li&gt;”。然后将它附加到在html视图中存储注释的元素