在我们这个博客应用中,我们只需要两个视图就行了,一个是Blog列表,另一个是单篇文章,代码是这样的:
# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from blog.models import Post
def index(request):
"""blog列表"""
posts = Post.objects.all()
return render_to_response("blog/index.html",
{"posts": posts},
context_instance=RequestContext(request))
def post(request, pk):
"""单篇文章"""
post = get_object_or_404(Post, pk=pk)
return render_to_response("blog/post.html",
{"post": post},
context_instance=RequestContext(request))
库的导入我们分为两个部份,一个是Django自带的,一个是我们的模型。在两个视图中,我们都分另进行了数据的查询操作,如:
post = get_object_or_404(Post, pk=pk)
这里我们使用了django.shortcuts.get_object_or_404
,也可以写成:
try:
posts = Post.objects.get(pk=pk)
except Post.DoesNotExist:
raise Http404()
两个方法都是对post
进行查询所有数据的操作,但第一种方式,当出现数据条数为0的时候,会报一个Http404
的错误,如果你设置了404
页面,则会路转到这个页面上。
render_to_response
需要三个参数:
模版
传递给模版的数据
,用{}
括起来,其实就是一个字典。context_instance
也是用来传送变量的,这里我们传送了request
,比如我们每个模版都需要传送一个user
变量,就可以使用user
或是request.user
来获取用户变量了。