在Django视图中使用HttpResponseRedirect(),其中必须传递上下文

时间:2016-12-24 21:59:14

标签: django django-forms django-views

在我的这个Django应用程序中,我使用ListView类来列出用户上传的照片。人们可以对这些照片进行投票或投票。未经过身份验证的用户可以查看照片,但不允许投票。

我的用户中一个不可忽视的部分使用无法支持JS的旧设备。对于此类用户,upvote或downvote不支持AJAX。而是整个页面刷新。

我确保页面刷新仍会将这些用户放在他们投票的同一张照片上。我通过HTML中的<a name="section{{ forloop_counter }}">标记执行此操作。

我每页显示20张照片,即20个部分。投票后,我将ListView类的photo_id传递给def get(self, request, *args, **kwargs)方法。我计算了photo_id出现的section_num。然后我只做了return HttpResponseRedirect(section_num)。这使我处于正确的位置,例如http://example.com/?page=1#section8

我的问题是:假设我正在编写自己的自定义视图以列出照片等,而不是使用ListView class。在这种情况下,如何实现上述HttpResponseRedirect(section_num)功能?一个说明性的例子会很棒。提前谢谢!

这是我的自定义视图:

    def photos_list(request, *args, **kwargs):
        form = PhotosListForm()
        ob_list = retrieve_latest_photos(request.user.id)
        paginator = Paginator(ob_list, 20)
        page = request.GET.get('page', '1')
        try:
            page = paginator.page(page)
        except PageNotAnInteger:
            page = paginator.page(1)
        except EmptyPage:
            page = paginator.page(paginator.num_pages)
        context = {'object_list': ob_list, 'form':form, 'page':page,'username':request.user.username}
        return render(request, 'photos_list.html', context)

注意:我读过this SO question,但无法辨别出它对我的情况有何帮助。部分原因是因为我是初学者,也因为操作似乎有不同的问题

1 个答案:

答案 0 :(得分:0)

您的问题不明确 - 但是,您是否考虑使用<a name="section{{ object.id }}"><div id="photo-{{ object.id }}">并重定向到#photo.id而不是计算?