按照教程,我得到了一个重新调整 None 的视图,因为 is_ajax 不起作用
Posted
技术标签:
【中文标题】按照教程,我得到了一个重新调整 None 的视图,因为 is_ajax 不起作用【英文标题】:Following a tutorial I got a view retuning None instead because is_ajax is not working 【发布时间】:2021-07-24 15:39:11 【问题描述】:我刚开始使用 ajax,但似乎找不到解决方法。我认为这可能与comment_id 与blog_id 有关。 (按照本教程:https://www.youtube.com/watch?v=VoWw1Y5qqt8&list=PLKILtxhEt4-RT-GkrDkJDLuRPQfSK-6Yi&index=39&ab_channel=AbhishekVerma)。
这就是我的views.py的样子
def like_comment(request):
comment = get_object_or_404(Comment, id=request.POST.get("comment_id"))
blog = get_object_or_404(BlogPost, id=request.POST.get("blog_id"))
comments = Comment.objects.filter(post=blog, reply=None)
if request.user in comment.likers.all():
comment.likers.remove(request.user)
else:
comment.likers.add(request.user)
context =
"comments": comments,
"blog_post": blog,
"body": markdown2.markdown(blog.body),
"comment_form": CommentForm(),
if request.is_ajax():
html = render_to_string('blog/like_section.html',
context, request=request)
return JsonResponse('form': html)
这是我的 HTML 的 sn-p
% if request.user.is_authenticated %
<form action=% url 'like_comment' % method="POST">
% csrf_token %
% if user in comment.likers.all %
<input type="hidden" name="blog_id" value=" blog_post.id ">
<button type="submit" id="like" name="comment_id" value=" comment.id ">Like</button>
% else %
<input type="hidden" name="blog_id" value=" blog_post.id ">
<button type="submit" id="like" name="comment_id" value=" comment.id ">Dislike</button>
% endif %
% else %
<div><small class="comment_time">Login to Like</small></div>
% endif %
</form>
</div>
<small class="comment_time"> comment.total_likes
Likes</small>
这是javascript:
$(document).ready(function (event)
$(document).on('click', '#like', function (event)
event.preventDefault();
var pk = $(this).attr('value');
$.ajax(
type: "POST",
url: '% url "like_comment" %',
data: 'blog_id': pk, 'csrfmiddlewaretoken': ' csrf_token ' ,
dataType: 'json',
success: function (response)
$('#like_section').html(response['form'])
console.log($('#like_section').html(response['form']));
,
error: function (rs, e)
console.log(rs.responseText);
,
);
);
);
我收到以下错误: Picture
【问题讨论】:
也许这对你有帮助:***.com/questions/8587693/… @Razenstein 我已经看过那个帖子,但没有发现任何有用的东西,可能是因为我不完全理解它 【参考方案1】:我将开始检查请求标头是否包含 HTTP_X_REQUESTED_WITH='XMLHttpRequest'。您可以使用浏览器的调试功能(例如 firefox)来做到这一点。也许您的 JS 库没有发送此标头。
查看 Django 文档: https://docs.djangoproject.com/en/1.11/ref/request-response/#django.http.HttpRequest.is_ajax
def is_ajax(self):
return self.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'
HttpRequest.is_ajax():
如果请求是通过 XMLHttpRequest 发出的,则返回 True,方法是检查字符串“XMLHttpRequest”的 HTTP_X_REQUESTED_WITH 标头。大多数现代 JavaScript 库都会发送此标头。如果您编写自己的 XMLHttpRequest 调用(在浏览器端),如果您希望 is_ajax() 正常工作,则必须手动设置此标头。
如果响应因是否通过 AJAX 请求而有所不同,并且您正在使用某种形式的缓存(例如 Django 的缓存中间件),您应该使用 vary_on_headers('X-Requested-With') 来装饰视图,以便响应正确缓存。
【讨论】:
以上是关于按照教程,我得到了一个重新调整 None 的视图,因为 is_ajax 不起作用的主要内容,如果未能解决你的问题,请参考以下文章