Три строки кода повторяются в трех разных видовых пунктах
У меня есть три view-функции в views.py в проекте django, которые используют одни и те же три аргумента в них:
paginator = Paginator(post_list, settings.POSTS_LIMIT)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
Как я могу поместить em в одну функцию (сделать утилиту), чтобы использовать одну строку кода в моих view-функциях, вместо повторного использования трех? Это мой первый вопрос, спасибо :)
Как вы заметили, для этого можно создать одну функцию, принимающую необходимую информацию в качестве аргументов. Вы можете включить ее в качестве вспомогательной функции в ваш views.py или выделить ее в utils.py и затем импортировать. Предположим последнее, для аккуратности и защиты на будущее
utils.py
from django.core.paginator import Paginator
from django.conf.settings import POSTS_LIMITS #you may have another place for your settings
from .utils import make_pagination #utils.py file in same directory
def make_pagination(request, thing_to_paginate, page_number=1, num_per_page=POSTS_LIMITS)
paginator = Paginator(thing_to_paginate, num_per_page)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return page_obj
views.py
from .utils import make_pagination
def records(request):
...
#we'll start on page three and use the provided settings-based default for num_per_page
page_obj = make_pagination(request, post_list, 3)
return render(request, 'template.html', {'page_obj': page_obj})
Если по какой-то причине вам нужно больше, чем просто page_obj, вы можете вернуть более одного значения, например,
utils.py
...
return page_obj, paginator
views py
...
page_obj, paginator = make_pagination(request, post_list, 1)