常用快捷方法
2022/1/9大约 1 分钟pythonweb框架
常用快捷方法
django.shortcuts 包如其名,提供快捷方式,减少代码量
render
我们写一个视图:
- 从数据库获取数据
- 找个 html 模板载入
- 组装上下文,给获取的数据打上标记
- 上下文和请求填充进模板,生成 html
- html 装进 HttpResponse 然后返回
from django.http import HttpResponse
from django.template import loader
from .models import Question
def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
template = loader.get_template('polls/index.html')
context = {'latest_question_list': latest_question_list,}
return HttpResponse(template.render(context, request))
「载入模板,填充上下文,再返回由它生成的 HttpResponse 对象」是一个非常常用的操作流程。所以 render 应运而生,只需提供三个常用参数:请求,模板和传入模板的上下文就完事了,你就能得到一个完整有实时数据的 HttpResponse 对象
from django.shortcuts import render
from .models import Question
def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
context = {'latest_question_list': latest_question_list}
return render(request, 'polls/index.html', context)
get_object_or_404
直接在浏览器改 id 来访问数据,如果数据不存在,就抛出 Http404 错误也是一个普遍的流程
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})
所以就有 get_object_or_404 方法让 4 行代码变为 1 行代码
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})