У меня возникли проблемы с разбивкой на страницы общей функции object_list django, которая на самом деле не является достаточно «умной», чтобы компенсировать мою глупость.
Я пытаюсь сделать URL-адрес для списка с необязательными аргументами для номера страницы и категории. URL-адрес в urls.py выглядит так:
url(r'^all/(?:(?P<category>[-\w]+)/page-(?P<urlpage>\d+))?/$',
views.listing,
),
Аргументы категории и URL-адреса являются необязательными из-за дополнительных "(?:)?" вокруг них, и это прекрасно работает. 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/a-z/page-1/page-2/
На самом деле неудивительно, что это то, что происходит, но отсутствие страницы в качестве необязательного аргумента действительно работает, и Django заменяет старую часть страницы URL-адреса.
Я бы предпочел это решение DRYer (по крайней мере, я так думаю), но, похоже, оно не работает. Будем очень признательны за любые советы, как это можно решить с помощью лучших тегов urls.py или template.
(также, пожалуйста, извините за неродной английский и код, переведенный на лету. Любые отзывы о том, является ли это хорошим или необоснованным вопросом о переполнении стека, также с удовольствием принимаются)