Jquery 当我执行AJAX调用来更改查询集时,JS停止处理子模板
我的Jquery 当我执行AJAX调用来更改查询集时,JS停止处理子模板,jquery,python,ajax,django,django-templates,Jquery,Python,Ajax,Django,Django Templates,我的comments.html子模板如下所示: <div class="commentsContainer"> {% for comment in comment_list %} ... {{ comment.text }} ... {% endfor %} </div> 调用此视图以更改查询集(初始查询集是comment\u list=comment.objects.filter().order\u b
comments.html
子模板如下所示:
<div class="commentsContainer">
{% for comment in comment_list %}
...
{{ comment.text }}
...
{% endfor %}
</div>
调用此视图以更改查询集(初始查询集是comment\u list=comment.objects.filter().order\u by('-score\u upvows')
:
这成功地交换了queryset,但是由于某些原因,没有javascript在新加载的模板/queryset上工作。有人能告诉我为什么会发生这种情况以及如何修复它吗
PS:调用时,有时在我的终端中会出现以下错误:
UserWarning:A{%csrf\u token%}已在模板中使用,但上下文未提供值。这通常是由于未使用RequestContext造成的。
Javascript控制台中有错误吗?JS控制台中没有错误我猜replaceWith
也会擦除事件处理程序。它们可能需要重新附加。这取决于JS代码所在的位置。因为它是JAX请求您第一次单击将起作用,因为DOM已被解析并侦听事件。但是,第二次,因为DOM已更改,并且当您单击按钮时不会触发onReady
事件。换句话说,您的js(AJAX函数)代码应该存在于子模板中。现在每次替换div
时,click
事件监听器都将是一个新的监听器。这是有道理的。这将很困难,因为我有许多偶数处理程序附加到注释,所以我是否将它们全部复制到注释模板中?或者您认为有可能复制到某个注释模板中w链接(
)注释模板中的相同JS文件?
$('.comments_new').on('click', function() {
$.ajax({
type: 'GET',
url: '/new_comments/',
data: {
},
success: function (data) {
$('.commentsContainer ').replaceWith(data);
}
})
});
def new_comments(request):
if request.is_ajax():
comment_list = Comment.objects.filter().order_by('-timestamp')
html = {'comment_list': render_to_string('comments.html', {'comment_list': comment_list})}
return JsonResponse(html)