Skip to content

Latest commit

 

History

History
52 lines (37 loc) · 1.66 KB

03.5.md

File metadata and controls

52 lines (37 loc) · 1.66 KB

编写Views

在我们这个博客应用中,我们只需要两个视图就行了,一个是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来获取用户变量了。