(个人用)Django教程第二部分:django.shortcuts

1. 渲染(request, 模板, 上下文)

from django.http import HttpResponse
from django.template import loader

def index(request):
    (中略)
    template = loader.get_template('polls/index.html')
    return HttpResponse(template.render(context, request))

使用django.shortcuts.render可以更简洁地编写代码,而不是使用django.http.HttpResponse和django.template.loader。

from django.shortcuts import render
# ...
def index(request):
    (中略)
    return render(request, 'polls/index.html', context)

获取对象或者返回404错误(对象, 主键)

from django.http import Http404
from django.shortcuts import render

from .models import Question
# ...
def detail(request, question_id):
    try:
        question = Question.objects.get(pk=question_id)
    except Question.DoesNotExist:
        raise Http404("Question does not exist")
    return render(request, 'polls/detail.html', {'question': question})

可以导入`django.shortcuts.get_object_or_404`替换`django.http.Http404`,这样可以更加简洁地编写代码,无需使用try~except语句进行分支判断。

from django.shortcuts import get_object_or_404, render

from .models import Question
# ...
def detail(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/detail.html', {'question': question})

順便提一下,看起来也有一个叫做 get_list_or_404() 的函数。这个函数的工作原理与 get_object_or_404() 相同,只是使用了 filter() 而不是 get() 方法。