djangoのジェネリックobject_list関数のページ付けが、私の巧妙さを補うのに十分なほど「スマート」ではないという問題があります。
ページ番号とカテゴリのオプションの引数を使用して、リストのURLを作成しようとしています。urls.pyのURLは次のようになります。
url(r'^all/(?:(?P<category>[-\w]+)/page-(?P<urlpage>\d+))?/$',
views.listing,
),
カテゴリとurlpageの引数は、余分な「(?:)?」があるため、オプションです。それらの周りとそれはうまく機能します。views.listingは、次のようなラッパー関数です(これが私の問題が発生する場所ではないと思います):
def listing(request,category="a-z",urlpage="1"):
extra_context_dict={}
if category=="a-z":
catqueryset=models.UserProfile.objects.all().order_by('user__username')
elif category=="z-a":
catqueryset=models.UserProfile.objects.all().order_by(-'user__username')
else:
extra_context_dict['error_message']='Unfortunately a sorting error occurred, content is listed in alphabetical order'
catqueryset=models.UserProfile.objects.all().order_by('user__username')
return object_list(
request,
queryset=catqueryset,
template_name='userlist.html',
page=urlpage,
paginate_by=10,
extra_context=extra_context_dict,
)
私のテンプレートuserlist.htmlには、次のようなリンクがあります(これが本当の問題だと思います):
{%if has_next%}
<a href=page-{{next}}>Next Page> ({{next}})</a>
{%else%}
私のURLのページ引数を置き換える代わりに、リンクはURLに別のページ引数を追加します。URLは「/all/ az / page-1 / page-2/ 」のようになります。
これが起こるのはそれほど驚くことではありませんが、オプションの引数としてページがないことは実際に機能し、DjangoがURLの一部である古いページを置き換えます。
私はこのDRYer(少なくとも私はそう思う)ソリューションを好みますが、それを機能させることができないようです。より良いurls.pyまたはテンプレートタグでこれを解決するためのヒントをいただければ幸いです。
(また、非ネイティブの英語とその場で翻訳されたコードを許してください。これが良いか、または不当なスタックオーバーフローの質問であるかどうかに関するフィードバックも喜んで受けます)