5.django视图函数
2017-12-04 本文已影响0人
马梦里
一、首页
from django.shortcuts import render
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from .models import User, Category, Page
def index(request):
categories = Category.objects.all()
pages = Page.objects.all().order_by('created_time')
context = {
'categories': categories,
'pages': pages
}
return render(request, 'mamengli_blog/index.html', context)
1.数据操作(数据模型)
// 获取所有数据,返回列表
Category.objects.all()
// 对数据进行排序
Page.objects.all().order_by('created_time')
// 获得具体字段名course的数据
// 通过外键反向查找,先找到具体的course,再找出course下的所有文章
category = Category.objects.get(course = category_name_slug)
pages = category.page_set.all()
2.模板操作
模板操作离不开两个函数
from django.shortcuts import render
from django.shortcuts import render_to_response
render(self,template,context)
render(template,context)
很明显后一个函数更简洁,少一个参数。context
为上下文变量,与模板进行交互,可以用locals()
代替,传入所有变量,但这样会使数据处理量增大;
二、课程文章列表
def page_list(request, category_name_slug):
category = Category.objects.get(course = category_name_slug)
pages = category.page_set.all()
context = {
'pages': pages
}
return render(request, 'mamengli_blog/page_list.html', context)
1.数据操作
这个主要就是通过传递进来的参数获得课程,再通过课程获得课程下面的所有文章,有一个外键的操作。
三、具体文章
def page_detail(request, category_name_slug, page_id):
category = Category.objects.get(course=category_name_slug)
page = category.page_set.get(id = page_id)
context = {
'page':page
}
return render(request, 'mamengli_blog/page_detail.html', context)
注意两点:
1.url
传过来两个参数,在视图函数多加两个位置参数;
2.不能直接用id
获取文章,因为你不知道这个文章属于哪个课程。所以先通过第一个参数拿到课程,再通过第二个参数拿到该课程下的文章。