Django Ajax分页

时间:2019-03-03 13:52:50

标签: python django django-models django-rest-framework django-views

我有DetailView我的AJAX分页在哪里。但是我无法在scipt.js中返回JsonResponse。它不会追加下一页数据。因此,当我单击下一步按钮时,它将在控制台中返回错误 my commentserror

  

返回JsonResponse({'pag_comments':list(pag_comments),'comment':[评论中的评论]})   TypeError:“ Paginator”对象不可迭代   [03 / Mar / 2019 17:36:06]“ GET / photo / 14 /?page = 2 HTTP / 1.1” 500 14562

我的views.py

class PhotoDetailView(DetailView):

queryset = Photo.objects.select_related('user').prefetch_related('comments', 'comments__user', 'likes')
context_object_name = 'photo'
template_name = 'photo_detail.html'

def get_success_url(self):
    return reverse('photo_detail', kwargs={'pk': self.object.pk})

def get_context_data(self, **kwargs):
    context = super(PhotoDetailView, self).get_context_data(**kwargs)
    page = self.request.GET.get('page')
    comments = paginator.Paginator(self.object.comments.all(), 5)
    try:
        pag_comments = comments.page(page)
    except (paginator.PageNotAnInteger, paginator.EmptyPage):
        pag_comments = comments.page(1)
    if self.request.is_ajax():
        return JsonResponse({'pag_comments': list(pag_comments), 'comment': [comment for comment in comments]})

    # context['pag_comments'] = pag_comments
    context['form'] = AddCommentForm(initial={'post': self.object.pk})
    context['is_liked_by_user'] = self.request.user in self.object.likes.all()

    return context

script.js

var showMore = $('.load-more')
showMore.click(function(event){
  event.preventDefault();
  $.ajax({
    url: $(this).attr('href'),
    type: "GET",
    success : function(data){
      $('.row').prepend('' + data["pag_comments"]);
    }
  }) 
})

comments.html

<div class="block-to-be-refreshed">
{% for comment in pag_comments %}
    <p><strong>{{ comment.user }}</strong> {{ comment.text }}</p>
{% endfor %}
</div>
<div class="row">

</div>
<div class="pagination">
  <span class="step-links">
    {% if pag_comments.has_next %}
        <a href="?page={{ pag_comments.next_page_number }}" class="load-more">next</a>

    {% endif %}
 </span>
</div>

没有AJAX即可

0 个答案:

没有答案