このDjangoアプリケーションでは、ユーザがアップロードした写真をリストするのにListView
クラスを使用します。これらの写真をアップホートまたはダウンボートすることができます。認証されていないユーザーは写真を見ることができますが、投票を行うことはできません。コンテキストを渡さなければならないDjangoビューでのHttpResponseRedirect()の使用
私のユーザーの無視できないセクションは、JSをサポートできないレガシーデバイスを使用しています。そのようなユーザーの場合、upvoteまたはdownvoteはAJAX対応ではありません。代わりに、ページ全体がリフレッシュされます。
私は投票した同じ写真の上に、そのようなユーザーを引き付けるようにします。私はHTMLの<a name="section{{ forloop_counter }}">
タグでこれを行います。
私はページあたり20枚の写真、つまり20個のセクションを表示します。投票時には、photo_id
〜def get(self, request, *args, **kwargs)
のListViewクラスのメソッドを渡します。私は計算する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を読んで、それは私の場合にどのように役立つかを見分けることはできません。私は初心者だからそれの一部はあるが、また別の問題に
ウディ、チップのおかげで。私の質問はこれです:テンプレートに 'context'辞書を渡さなければならないので、私は**カスタムビュー**で' render() 'を使っています。ページ内の特定のアンカータグにリダイレクトするにはどうすればよいですか? ListViewクラスでは、 'get()'メソッドで 'HttpResponseRedirect'を使うことができます。カスタムビューを使用するとどうなりますか? –
はい、カスタムビューから使用できます。 – Udi
さて、それを得ました。基本的に 'vote'は、' HttpResponseRedirect'を使って正しいアンカータグに到達するカスタムリダイレクトビューを呼び出します。 'object.id'の使用に関するヒントについては、私はそれを十分にはっきり説明していませんでした - 写真のリストが改ページされているので、**ページ番号**も推測する必要があります。私。 '#section8'だけでなく'?page = 1#section8'を計算してください。答えにあなたのヒントを使用すれば、どうすればいいですか? –