如何在"Django rest framework"中通过html访问路由器路径?



我正在尝试在Django Rest Framework中构建一个简单的博客。 我想通过按列表页面上的按钮将 post 方法发送到服务器来添加喜欢计数。

这是 views.py

class BlogListView(viewsets.ModelViewSet):
serializer_class = BlogSerializer
renderer_classes = [JSONRenderer, TemplateHTMLRenderer]
def create(self, request, *args, **kwargs):
user = request.user
like_id = request.POST.get('pk', None)
add_like = Like.objects.get(pk=like_id)
if add_like.likes.filter(id=user.id).exists():
add_like.likes.remove(user)
else:
add_like.likes.add(user)
context = {'likes_count': add_like.total_likes}
serializer = BlogSerializer(context)
return Response(serializer, content_type='application/json')

这是网址。

router = DefaultRouter()
router.register('dashboard', views.BlogListView, basename='dashboard')
app_name = 'blog'
urlpatterns = [
path('', include(router.urls)),
]

这是 HTML。

<button type="button" class="like" name="{{ like.id }}">
<script type="text/javascript">
$.('.like').click(function () {
var pk = $(this).attr('name');
$.ajax({
type: "POST",
url: "{% url 'blog:dashboard' %}",
data: {'pk': pk, 'csrfmiddlewaretoken': '{{ csrf_token }}'},
dataType: "json",
success: function (response) {
id = $(this).attr('name');
$('#count'+pk).html('count: ' + response.likes_count);
alert('success');
},
error: function (request.status.error) {
alert('error');
}
});
})
</script>

但是这个网址吐出了这个错误。

Reverse for 'dashboard' not found. 'dashboard' is not a valid view function or pattern name.

我怎样才能解决这个问题?

您正在使用具有不同操作(如列表、更新、检索(的 ViewSet。

而不是{% url 'blog:dashboard' %},你应该使用{% url 'blog:dashboard-list' %}

请参阅:https://www.django-rest-framework.org/api-guide/routers/#usage

最新更新