django - Django 返回 NoReverseMatch 而不是使用 Ajax 更新 div
问题描述
描述
我正在为在帖子上发表的评论创建一个赞按钮。
当用户单击like 按钮时,Django 会给出NoReverseMatch并且页面不会自动更新。
刷新页面后,尽管出现NoReverseMatch错误,但它显示数据库中的类似已更新。
我试过什么?
最初,问题在于 csrf_tokens。所以,我添加了 csrf_exempt 装饰器,所以这绝对不是问题。
我玩了很多网址,并尝试将评论ID添加到参数中,但似乎没有帮助。
问题
如何解决 NoReverseMatch 错误并使其使 AJAX 自动将按钮从喜欢更改为不喜欢。
网址.py
path('post/<int:pk>/like-comment', like_comment, name="like_comment")
视图.py
@csrf_exempt
def like_comment(request, pk):
comment = get_object_or_404(Comment, id=request.POST.get('id'))
liked = False
if comment.likes.filter(id=request.user.id).exists():
comment.likes.remove(request.user)
liked = False
else:
comment.likes.add(request.user)
liked = True
context = {
'comment': comment,
'is_liked': liked,
'total_likes': comment.likes.count()
}
if request.is_ajax():
html = render_to_string('blog/like_section_comment.html', context, request=request)
return JsonResponse({'form': html})
main.js
$(document).ready(function(event){
$(document).on('click', '#like-comment', function(event){
event.preventDefault();
var pk1 = $(this).attr('value'); // comment id
var pk = $(this).attr('data-value'); // post id
$.ajax({
type: 'POST',
url: "like-comment",
data: {'id': pk1, 'csrfmiddlewaretoken': '{{ csrf_token }}'},
dataType: 'json',
success: function(response) {
$('#like-section-comment').html(response['form'])
console.log($('#like-section-comment').html(response['form']));
},
error: function(rs, e) {
console.log(rs.responseText);
},
});
});
});
comment_section.html
<article class="media content-section">
{% if user.is_authenticated %}
<form id="like-form-comment" method="post">
{% csrf_token %}
{% if request.user in comment.likes.all %}
<button type="submit" id="like-comment" name="comment_id" data-value="{{ comment.post.id }}" value="{{ comment.id }}" class="btn btn-danger btn-sm">
Dislike
</button>
{% else %}
<button type="submit" id="like-comment" name="comment_id" data-value="{{ comment.post.id }}" value="{{ comment.id }}" class="btn btn-primary btn-sm">
Like
</button>
{% endif %}
</form>
{% endif %}
解决方案
你写url: "like-comment",
了如何映射到正确的 url?Javascript 对 Django 一无所知。试试这个:
在你的 html 中:
<button type="submit" id="like-comment" name="comment_id" data-value="{{ comment.post.id }}" value="{{ comment.id }}" data-submit-url="{% url 'like_comment' comment.id %}" class="btn btn-primary btn-sm">
现在在你的 JavaScript 中:
url: $(this).attr('data-submit-url'),
推荐阅读
- database - 在 mongodb 中插入字段的任何解决方法都以 $ 符号开头
- javascript - 没有点击事件的循环中的Javascript函数
- java - 如何更改 javafx 图表的轴颜色?
- linux - Systemd 在启动时延迟日历事件的启动时间或等待其他服务
- c# - button_onclick() 在 .aspx 页面本身中生成
- html - 如何阻止对 API 生成的 URL 的抓取和索引?
- c# - 如何在外键列上更新和插入值?
- python - 使用 exec(open()) 将参数传递给 python 脚本
- python - 当我将local的值设置为大于1时,为什么pyspark会出现错误
- python-3.x - 为什么 asyncio call_later() 不能在 python 中工作?