视图层的主要工作是衔接HTTP请求、Python程序、HTML模板
直接构造HTML页面
对于简单的页面,可以直接在视图函数中构造返回给客户端
from django.http import HttpResponse
import datetime
def current_datetime(request):
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
return HttpResponse(now)
用数据渲染HTML模板文件
模板文件包含丰富的HTML内容,使用渲染模板文件的方法返回月面是最常用的Django视图函数技术
from django.shortcuts import render
from app.models import Moment
def detail(request, moment_id):
m = Moment.objects.get(id=moment_id)
return render(request, 'templates/moment.html', {'headline': m.headline, 'user': m.user_name})
返回HTTP错误
HTTP错误可以通过头部的status表达,如:
from django.http import HttpResponse
def my_view(request):
return HttpResponse(status=404)
也可以直接通过HttpResponse的子类直接返回错误,如:
from django.http import HttpResponseNotFound
def my_view(reequest):
return HttpResponseNotFound()
常用的特定情况的HttpResponse子类:
- HttpResponseRedirect:302,用于URL重定向,需要将重定向的目标地址作为参数传给该类
- HttpResponsePermanentRedirect:301,与302类似,但告诉浏览器这是一个永久重定向
- HttpResponseNotModified:304,用于指示浏览器用其上次请求时的缓存结果作为页面显示
- HttpResponseBadRequest:400,请求内容出错
- HttpResponseForbidden:403,禁止访问错误
- HttpResponseNotAllowed:405.用不允许的方法访问本页面
- HttpResponseServerError:500,服务器内部出错
模板语法
模板文件是一个文本文件,主要有HTML、CSS等组成,如:
{% extends "base.html" %}
{% block title %}{{ section.title }}{% endblock %}
{% block content %}
<h1>{{ section.title }}</h1>
{% for moment in moment_list %}
<h2>
{{% moment.headline|upper %}}
</h2>
{% endfor %}
{% endblock %}
1、变量替换
用双大括号标记 {{ variable }} 指示进行变量内容替换
2、过滤器
放在变量后用于控制变量显示格式的技术,变量|过滤器,过滤器有很多,可以查看文档了解
3、流程控制
Django提供基本的流程控制,如 {% for %}...{% endfor %}、{% if %}...{% endif %}
4、模板继承
模板继承功能可以使多个页面的公共部分编写在一个模板文件中,父模板主要是定义页面的框架