views.py
from django.core.paginator import Paginator
def index(request):
posts_list = Post.objects.all().order_by('-id')
paginator = Paginator(posts_list, 5)
try:
page = int(request.GET.get('page', '1'))
except:
page = 1
try:
posts = paginator.page(page)
except(EmptyPage, InvalidPage):
posts = paginator.page(paginator.num_pages)
return render_to_response('home/index.html',
{ 'posts' : posts },
context_instance=RequestContext(request))
答案 0 :(得分:2)
这是Python的get
方法功能和Django的GET
之间的混合,
基本上,由于GET
是一个包含所有给定HTTP GET参数的类似字典的对象,因此您要在此处尝试实现的是找到给定键{{1 }}。如果不存在,它将回退到'page'
打算使用的默认值1
。
答案 1 :(得分:0)
以简单的方式...您正在使用get()方法,如果不返回None(空),它将检查所需元素是否存在,因此,如果“ page”存在,则您正在搜索GET(HTTP)参数,如果不存在,则返回1
mypage.com/?page=2
request.GET['page'] # That will force get page param, and you will if not found
request.GET.get('page', '1') # Tha will check if param exists, and return 1 if not found
使用GET.get()是一个糟糕的做法,因为您的错误将使您失败,,可以使GET ['page']更好,并使用try/except
try:
page = request.GET['page']
...
except Exception as e:
print(e) # handle your errors
page = 1 # The Default value when erros comes
...