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获取文章,因为你不知道这个文章属于哪个课程。所以先通过第一个参数拿到课程,再通过第二个参数拿到该课程下的文章。

上一篇 下一篇

猜你喜欢

热点阅读