request.GET.get('page','1')在这里意味着什么?

时间:2018-07-31 17:16:47

标签: python django

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))

2 个答案:

答案 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
...