【发布时间】:2017-05-10 02:02:41
【问题描述】:
在我的这个 Django 应用程序中,我使用 ListView 类来列出用户上传的照片。人们可以对这些照片投赞成票或反对票。未经认证的用户可以看到照片,但不能投票。
我的用户中有不可忽视的部分使用不支持 JS 的旧设备。对于此类用户,upvote 或 downvote 不支持 AJAX。相反,整个页面都会刷新。
我确保页面刷新仍然让这些用户看到他们投票的同一张照片。我通过 HTML 中的 <a name="section{{ forloop_counter }}"> 标记执行此操作。
我每页显示 20 张照片,即 20 个部分。投票后,我将 photo_id 传递给 ListView 类的 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,但无法辨别它对我的情况有何帮助。部分是因为我是初学者,但也因为那里的操作似乎有不同的问题
【问题讨论】:
标签: django django-forms django-views