三串代码在三个不同的视图函数中重复
Three strings of code repeat in three different view-functios
我在 django 项目的 views.py 中有三个视图函数,它们使用相同的三个参数:
paginator = Paginator(post_list, settings.POSTS_LIMIT)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
如何将 em 放入单个函数(创建实用程序)以在我的视图函数中使用一串代码,而不是重复使用三串代码?
这是我的第一个问题,谢谢 :)
正如您所注意到的,您可以创建一个函数来处理这个问题,将它需要的信息作为参数。您可以将其作为辅助函数包含在 views.py 中,或者将其分离到 utils.py 中,然后导入它。假设是后者,为了整洁和 future-proofing
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, 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 use the provided settings-based default for num_per_page
page_obj = make_pagination(request, post_list)
return render(request, 'template.html', {'page_obj': page_obj})
如果出于某种原因你想要的不仅仅是 page_obj,你可以 return 多于一个值,例如,
utils.py
...
return page_obj, paginator
观看次数
...
page_obj, paginator = make_pagination(request, post_list)
我已经在函数本身中获得了页码,但您也可以在视图本身中,甚至在视图中的函数调用中这样做,例如,
make_pagination(request.GET.get('page') or 1, post_list)
(如果你走这条路,不要忘记更改函数以适应不同的参数)
我在 django 项目的 views.py 中有三个视图函数,它们使用相同的三个参数:
paginator = Paginator(post_list, settings.POSTS_LIMIT)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
如何将 em 放入单个函数(创建实用程序)以在我的视图函数中使用一串代码,而不是重复使用三串代码? 这是我的第一个问题,谢谢 :)
正如您所注意到的,您可以创建一个函数来处理这个问题,将它需要的信息作为参数。您可以将其作为辅助函数包含在 views.py 中,或者将其分离到 utils.py 中,然后导入它。假设是后者,为了整洁和 future-proofing
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, 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 use the provided settings-based default for num_per_page
page_obj = make_pagination(request, post_list)
return render(request, 'template.html', {'page_obj': page_obj})
如果出于某种原因你想要的不仅仅是 page_obj,你可以 return 多于一个值,例如,
utils.py
...
return page_obj, paginator
观看次数
...
page_obj, paginator = make_pagination(request, post_list)
我已经在函数本身中获得了页码,但您也可以在视图本身中,甚至在视图中的函数调用中这样做,例如,
make_pagination(request.GET.get('page') or 1, post_list)
(如果你走这条路,不要忘记更改函数以适应不同的参数)