前面记到数据库与模型(models)有联系,现在记录一下视图与模板,他们两个也有联系。

个人理解:视图就好像一个cpu,比较核心,就是用来处理问题的,又叫业务逻辑处理,他把处理完的结果插入到模板里面,最后将模板返回给前端,进行展示。模板就好比一篇完形填空,留一些空等着视图插入数据。

这里说明一下,django是根据url来选择视图的。(强大的url系统)

写视图如下:

def detail(request, question_id):
return HttpResponse("You're looking at question %s." % question_id) def results(request, question_id):
response = "You're looking at the results of question %s."
return HttpResponse(response % question_id) def vote(request, question_id):
return HttpResponse("You're voting on question %s." % question_id)

这里有四个视图:视图就是python函数,最后需要返回一个响应包。每当我们写完一个视图都需要在urls.py里面告诉django有一个视图的存在。如下一样:

from django.urls import path

from . import views

urlpatterns = [
# ex: /polls/
path('', views.index, name='index'),
# ex: /polls/5/
path('<int:question_id>/', views.detail, name='detail'),
# ex: /polls/5/results/
path('<int:question_id>/results/', views.results, name='results'),
# ex: /polls/5/vote/
path('<int:question_id>/vote/', views.vote, name='vote'),
]

写一个用来显示前5个投票的视图index:

from django.http import HttpResponse

from .models import Question

def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
output = ', '.join([q.question_text for q in latest_question_list])
return HttpResponse(output)

到这里就完成了视图的书写。但是有一点,就是我们返回到前端都是固定页面,那么我们想要一个比较花哨的页面,比如需要一些css修饰时,那怎么把我们的好看的页面显示在前端呢?这时就需要模板(Temples),模板就是用来放前端的页面的。

Templates(模板):用来放HTML页面的,模板有自己特殊的语言叫模板语言-----很简单的一种语言;模板是在视图里面的应用模板的。大概的流程:框架接收到请求,然后通过url系统将请求装发给相应的视图,视图再去加载相应的模板(如何加载相应的模板以及如何在模板里进行相应的数据替换的,后面再记录。。。),这里要说明一下,就是模板放在哪里?一般放在模板所属的app里面,在里面创建一个Templates文件夹(在Templates里面在创建一个以app名字命名的文件夹,之后才在里面存放模板问价,这样做是为了防止两个或多个不同的app有相同的模板问价,这样框架就可能不知道返回哪一个模板摁键了。)

现在在相应的地方创建好文件夹,创建一个index.html的文件,写入:

{% if latest_question_list %}
<ul>
{% for question in latest_question_list %}
<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}

然后进入到相应的视图来引用该模板:

from django.http import HttpResponse
from django.template import loader from .models import Question def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
template = loader.get_template('polls/index.html')
context = {
'latest_question_list': latest_question_list,
}
return HttpResponse(template.render(context, request))

以上是视图加载模板。context(上下文):是一个字典,用来插入模板里面的变量:  通过render方法插入。

render()函数:第一个参数:request,第二个参数是模板的位置(uel),第三个参数是上下文(context)。如下:

from django.shortcuts import render

from .models import Question

def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
context = {'latest_question_list': latest_question_list}
return render(request, 'polls/index.html', context)

以上就是完整的模板,视图基本使用与原理。大概就是这些的了~~~~~~~~~~~~~~~~~~~~~~~

这里还有特别的说明:  就是有时候我们去发送一个请求时,在我们的服务器端没有这个相应的请求时,就会返回一个404的页面。也就是啥也没找到的时候,就返回这个模板。如下:

from django.http import Http404
from django.shortcuts import render from .models import Question
# ...
def detail(request, question_id):
try:
question = Question.objects.get(pk=question_id)
except Question.DoesNotExist:
raise Http404("Question does not exist")
return render(request, 'polls/detail.html', {'question': question})

以上就差不多就是这些了~~~~~~~~完美  >_<  !

Django视图与模板(6)的更多相关文章

  1. 第一个Django应用 - 第三部分:Django视图和模板

    一.概述 一个视图就是一个页面,通常提供特定的功能,使用特定的模板.例如:在一个博客应用中,你可能会看到下列视图: 博客主页:显示最新发布的一些内容 每篇博客的详细页面:博客的永久链接 基于年的博客页 ...

  2. 3.Django| 视图层| 模板层

    1.视图函数 文件在view_demo 一个视图函数简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XM ...

  3. Part 3:视图和模板--Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...

  4. Django(二)路由系统、视图、模板

    大纲 一.内容概要: 二.上节回顾 三.Django 视图–views  1.获取用户多个数据及文件上传  2.FBV 和 CBV  3.装饰器 四.Django模板补充  - Django模板语言循 ...

  5. Django基础(路由、视图、模板)

    目录导航 Django 路由控制 Django 视图层 Django 模版层 Django 路由控制 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用 ...

  6. 五、Django之视图和模板-Part 3

    一.概述 一个视图就是一个页面,通常提供特定的功能,使用特定的模版.列如:在一个博客应用中,你可能会看到下列视图: 博客主页:显示最新发布的一些内容 每篇博客的详细页面:博客的永久链接 基于年的博客页 ...

  7. 【python】-- Django路由系统(网址关系映射)、视图、模板

    Django路由系统(网址关系映射).视图.模板 一.路由系统(网址关系映射) 1.单一路由对应: 一个url对应一个视图函数(类) urls.py: url(r'^test', views.test ...

  8. Django 基础篇(二)视图与模板

    视图 在django中,视图对WEB请求进行回应 视图接收reqeust对象作为第一个参数,包含了请求的信息 视图就是一个Python函数,被定义在views.py中 #coding:utf- fro ...

  9. Django基础三之路由、视图、模板

    Django基础三之路由.视图.模板 目录 Django基础三之路由.视图.模板 1. Django 请求和返回周期 1.1 路由层之路由匹配 1.2 有名分组 1.3 无名分组 2. 反射解析 3. ...

随机推荐

  1. python+selenium 元素定位--iframe

    1. 一般webdriver要操作页面元素需要在Top Window的状态下,如下: 2.当浏览器显示iframe时,用正常的元素定位是没有效果的,需要将页面装换到iframe下再对页面元素进行操作 ...

  2. 2022 跳槽涨薪必不可少面试通关宝典 —— css 篇

    生于忧患死于安乐!已经居家隔离 23 天了,解封以后估计就得找工作了,提前准备起来!需要的赶紧收藏起来 一.谈谈你对 BFC 的理解及作用. BFC 是 Block Formatting Contex ...

  3. Ultimaker2+使用指南

    USB打印 使用最新的官方软件即可进行USB3D打印. 使用时在选项上进行预热以及x,y,z重新归零定位,每次开始都要做. SD卡打印 比较方便,因为电脑可能拿去做其他事情. 打印机堵塞 退出耗材时候 ...

  4. condition_variable中的和wait_once和notify_one及notify_all实例代码

    // ConsoleApplication6.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include<thread> #in ...

  5. 无法自动装配。未找到 ‘xxxx’ 类型的 Bean。

    无法自动装配.未找到 'xxxx' 类型的 Bean. 1.解决办法 打开设置,找到编辑器->检查.把"自动装配Bean类",取消勾选,点击应用.确定.

  6. 人工智能与智能系统1->机器人学1 | 位置与姿态描述

    寒假有几项学习计划,其中有一些是为了一些任务而学,最主要的任务是我要在2021_v4的基础上编写2022_v1的大援代码,为此顺便学习一下机器人学的知识(下学期也有这方面的老黄的课程),看看能不能在结 ...

  7. CSS之 sass、less、stylus 预处理器的使用方式

    更详细区别参考文档:https://blog.csdn.net/pedrojuliet/article/details/72887490 使用变量: sass:  使用 $ 符号定义变量,如: $ba ...

  8. 微前端框架 之 qiankun 从入门到源码分析

    封面 简介 从 single-spa 的缺陷讲起 -> qiankun 是如何从框架层面解决 single-spa 存在的问题 -> qiankun 源码解读,带你全方位刨析 qianku ...

  9. CDNDrive 第一个版本发布 & 布客新知第二次备份完成

    CDNDrive 第一个版本发布,新适配五个图床 https://github.com/apachecn/CDNDrive 另外,布客新知第二次备份完成 TutorialsPoint:http://i ...

  10. Lesson4——NumPy 数组属性

    NumPy 教程目录 NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推. 在 NumPy中,每一个线性的数组称为是一个轴(axi ...