Django视图与模板(6)
前面记到数据库与模型(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)的更多相关文章
- 第一个Django应用 - 第三部分:Django视图和模板
一.概述 一个视图就是一个页面,通常提供特定的功能,使用特定的模板.例如:在一个博客应用中,你可能会看到下列视图: 博客主页:显示最新发布的一些内容 每篇博客的详细页面:博客的永久链接 基于年的博客页 ...
- 3.Django| 视图层| 模板层
1.视图函数 文件在view_demo 一个视图函数简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XM ...
- Part 3:视图和模板--Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- Django(二)路由系统、视图、模板
大纲 一.内容概要: 二.上节回顾 三.Django 视图–views 1.获取用户多个数据及文件上传 2.FBV 和 CBV 3.装饰器 四.Django模板补充 - Django模板语言循 ...
- Django基础(路由、视图、模板)
目录导航 Django 路由控制 Django 视图层 Django 模版层 Django 路由控制 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用 ...
- 五、Django之视图和模板-Part 3
一.概述 一个视图就是一个页面,通常提供特定的功能,使用特定的模版.列如:在一个博客应用中,你可能会看到下列视图: 博客主页:显示最新发布的一些内容 每篇博客的详细页面:博客的永久链接 基于年的博客页 ...
- 【python】-- Django路由系统(网址关系映射)、视图、模板
Django路由系统(网址关系映射).视图.模板 一.路由系统(网址关系映射) 1.单一路由对应: 一个url对应一个视图函数(类) urls.py: url(r'^test', views.test ...
- Django 基础篇(二)视图与模板
视图 在django中,视图对WEB请求进行回应 视图接收reqeust对象作为第一个参数,包含了请求的信息 视图就是一个Python函数,被定义在views.py中 #coding:utf- fro ...
- Django基础三之路由、视图、模板
Django基础三之路由.视图.模板 目录 Django基础三之路由.视图.模板 1. Django 请求和返回周期 1.1 路由层之路由匹配 1.2 有名分组 1.3 无名分组 2. 反射解析 3. ...
随机推荐
- linux服务器之间传输文件的四种方式
linux文件传输在内网渗透中至关重要,所以我在此总结一下几种Linux服务器之间传输文件的四种方式 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法]scp就是se ...
- 【Java常用类】LocalDate、LocalTime、LocalDateTime
LocalDate.LocalTime.LocalDateTime 说明 JDK 1.0中包含了 一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被 ...
- Visaul Studio 2015 MFC 应用程序工程创建
近一段时间开始接触到MFC桌面开发程序,忙完了一段时间的项目开发之后,来整理整理Visaul Studio 2015开发MFC桌面程序的基本功能. 首先从创建软件工程项目开始,Visaul Studi ...
- leetcode 33. 搜索旋转排序数组 及 81. 搜索旋转排序数组 II
33. 搜索旋转排序数组 问题描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定 ...
- 【C++】类-派生和继承
类-派生和继承 目录 类-派生和继承 1.基本概念 2. 语法 3. 继承方式 4. 类型转换 5. 派生类的构造.析构函数 构造函数 复制构造函数 析构函数 1.基本概念 继承:保持已有类的特性而构 ...
- Android开发----RecyclerView视图的学习
RecyclerView RecyclerView是什么? RecyclerView是如今Android开发中最常用的控件,其相较于ListView和GridView的功能更为强大,优化了两者的各种不 ...
- python代码加注释--6
备注:#用来注释代码,#后面的内容会被python解释器忽略
- React 世界的一等公民 - 组件
猪齿鱼Choerodon平台使用 React 作为前端应用框架,对前端的展示做了一定的封装和处理,并配套提供了前端组件库Choerodon UI.结合实际业务情况,不断对组件优化设计,提高代码质量. ...
- Azure AD Domain Service(一)将 Azure VM 实例添加到域服务里
一,引言 有网友提到实际项目中如何将 Azuer VM 实例加入到 Azure AD 域,那我们今天就带着整个问题开始今天的分析!首先我们得了解什么是 Azure AD 域服务,Azure AD 域服 ...
- SpringMVC之RedirectAttributes属性
RedirectAttributes是SpringMVC3.1版本之后出来的一个新功能,专门用于重定向之后还能带参数跳转的的工具类. 两种带参方式: redirectAttributes.addAtt ...