2016-12-24 18 views
1

在我這個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,但不能辨別它如何幫助我的情況。其中一部分是因爲我是個初學者,但也因爲運似乎有不同的問題

回答

0

您的問題沒有明確的 - 但是,你有沒有考慮使用<a name="section{{ object.id }}"><div id="photo-{{ object.id }}">並重定向到#photo.id,而不是計算?

+0

Udi,謝謝你的提示。我的問題是這樣的:我必須將'context'字典傳遞給模板,因此我在**自定義視圖**中使用了'render()'。現在,我需要做什麼才能重定向到頁面中的特定錨定標記?使用ListView類,我可以在'get()'方法中使用'HttpResponseRedirect'。使用自定義視圖時怎麼樣? –

+0

是的,您可以從自定義視圖中使用它。 – Udi

+0

好的,明白了。基本上'vote'會調用一個自定義的重定向視圖,它使用'HttpResponseRedirect'來獲得正確的錨標籤。至於關於使用'object.id'的提示 - 我沒有足夠清楚地解釋它 - 我需要推斷**頁碼**,因爲照片列表是分頁的。即計算'?page = 1#section8'而不只是'#section8'。如果我在答案中使用小費,我該怎麼做? –

相關問題