簡體   English   中英

三串代碼在三個不同的視圖函數中重復

[英]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 中,然后將其導入。 假設是后者,為了整潔和面向未來

實用程序.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

視圖.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,您可以返回多個值,例如,

實用程序.py

...
return page_obj, paginator

視圖 py

...
page_obj, paginator = make_pagination(request, post_list)

我已經在函數本身中獲得了頁碼,但您也可以在視圖本身中執行此操作,甚至在視圖中的函數調用中執行此操作,例如,

make_pagination(request.GET.get('page') or 1, post_list)

(如果你走這條路,別忘了改變函數來適應不同的參數)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM