在我這個Django應用程序Django視圖,我用一個ListView
類列出用戶上傳的照片。人們可以upvote或downvote這些照片。未經認證的用戶可以看到照片,但不允許投票。使用HttpResponseRedirect()在上下文將被傳遞
的我的用戶的不可忽視的部分使用不支持JS傳統設備。對於此類用戶,upvote或downvote不支持AJAX。相反,整個頁面刷新。
我保證刷新頁面仍是地對他們投票的同一張照片這樣的用戶。我通過HTML中的<a name="section{{ forloop_counter }}">
標記執行此操作。
我每頁顯示20張,即20節。在投票時,我將photo_id
傳遞給ListView類的def get(self, request, *args, **kwargs)
方法。我計算出哪個section_num
出現在photo_id中。然後我只需要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,但不能辨別它如何幫助我的情況。其中一部分是因爲我是個初學者,但也因爲運似乎有不同的問題
Udi,謝謝你的提示。我的問題是這樣的:我必須將'context'字典傳遞給模板,因此我在**自定義視圖**中使用了'render()'。現在,我需要做什麼才能重定向到頁面中的特定錨定標記?使用ListView類,我可以在'get()'方法中使用'HttpResponseRedirect'。使用自定義視圖時怎麼樣? –
是的,您可以從自定義視圖中使用它。 – Udi
好的,明白了。基本上'vote'會調用一個自定義的重定向視圖,它使用'HttpResponseRedirect'來獲得正確的錨標籤。至於關於使用'object.id'的提示 - 我沒有足夠清楚地解釋它 - 我需要推斷**頁碼**,因爲照片列表是分頁的。即計算'?page = 1#section8'而不只是'#section8'。如果我在答案中使用小費,我該怎麼做? –