У меня возникли проблемы с разбиением на страницы общей функции object_list django, которая недостаточно умна, чтобы компенсировать мою глупость.
Я пытаюсь создать URL для перечисления с необязательными аргументами для номера страницы и категории.
URL в urls.py выглядит так:
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. URL в конечном итоге выглядит следующим образом "/ all / a-z / page-1 / page-2 /
Не удивительно, что именно так и происходит, но отсутствие страницы в качестве необязательного аргумента действительно работает, и Django заменяет старую часть страницы в URL.
Я бы предпочел это DRYer (по крайней мере, я так думаю) решение, но, похоже, оно не работает.
Любые советы, как это можно решить с помощью лучших urls.py или шаблонных тегов, будут очень благодарны.
(также, пожалуйста, извините за неродной английский и на лету переведенный код. Любая обратная связь относительно того, является ли это хорошим или необоснованным вопросом переполнения стека, также с радостью принимается)