視圖層的主要工作是銜接HTTP請(qǐng)求、Python程序、HTML模板
直接構(gòu)造HTML頁面
對(duì)于簡(jiǎn)單的頁面,可以直接在視圖函數(shù)中構(gòu)造返回給客戶端
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)
用數(shù)據(jù)渲染HTML模板文件
模板文件包含豐富的HTML內(nèi)容,使用渲染模板文件的方法返回月面是最常用的Django視圖函數(shù)技術(shù)
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錯(cuò)誤
HTTP錯(cuò)誤可以通過頭部的status表達(dá),如:
from django.http import HttpResponse
def my_view(request):
return HttpResponse(status=404)
也可以直接通過HttpResponse的子類直接返回錯(cuò)誤,如:
from django.http import HttpResponseNotFound
def my_view(reequest):
return HttpResponseNotFound()
常用的特定情況的HttpResponse子類:
- HttpResponseRedirect:302,用于URL重定向,需要將重定向的目標(biāo)地址作為參數(shù)傳給該類
- HttpResponsePermanentRedirect:301,與302類似,但告訴瀏覽器這是一個(gè)永久重定向
- HttpResponseNotModified:304,用于指示瀏覽器用其上次請(qǐng)求時(shí)的緩存結(jié)果作為頁面顯示
- HttpResponseBadRequest:400,請(qǐng)求內(nèi)容出錯(cuò)
- HttpResponseForbidden:403,禁止訪問錯(cuò)誤
- HttpResponseNotAllowed:405.用不允許的方法訪問本頁面
- HttpResponseServerError:500,服務(wù)器內(nèi)部出錯(cuò)
模板語法
模板文件是一個(gè)文本文件,主要有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、變量替換
用雙大括號(hào)標(biāo)記 {{ variable }} 指示進(jìn)行變量?jī)?nèi)容替換
2、過濾器
放在變量后用于控制變量顯示格式的技術(shù),變量|過濾器,過濾器有很多,可以查看文檔了解
3、流程控制
Django提供基本的流程控制,如 {% for %}...{% endfor %}、{% if %}...{% endif %}
4、模板繼承
模板繼承功能可以使多個(gè)頁面的公共部分編寫在一個(gè)模板文件中,父模板主要是定義頁面的框架