Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Django 视图和模板1.4

Django 视图和模板1.4

作者头像
Lansonli
发布于 2021-10-09 03:16:50
发布于 2021-10-09 03:16:50
61100
代码可运行
举报
文章被收录于专栏:Lansonli技术博客Lansonli技术博客
运行总次数:0
代码可运行

视图

  • django中,视图对WEB请求进行回应
  • 视图接收reqeust对象作为第一个参数,包含了请求的信息
  • 视图就是一个Python函数,被定义在views.py中
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding:utf-8
from django.http import HttpResponse

def index(request):
    return HttpResponse("index")
def detail(request,id):
    return HttpResponse("detail %s" % id)
  • 定义完成视图后,需要配置urlconf,否则无法处理请求

URLconf

  • 在Django中,定义URLconf包括正则表达式、视图两部分
  • Django使用正则表达式匹配请求的URL,一旦匹配成功,则调用应用的视图
  • 注意:只匹配路径部分,即除去域名、参数后的字符串
  • 在test1/urls.py插入booktest,使主urlconf连接到booktest.urls模块
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
url(r'^', include('booktest.urls')),
  • 在booktest中的urls.py中添加urlconf
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.conf.urls import url
from . import views
urlpatterns = [
    url(r'^$', views.index),
    url(r'^([0-9]+)/$', views.detail),
]

模板

  • 模板是html页面,可以根据视图中传递的数据填充值
  • 创建模板的目录如下图:
  • 修改settings.py文件,设置TEMPLATES的DIRS值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'DIRS': [os.path.join(BASE_DIR, 'templates')],
  • 在模板中访问视图传递的数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{{输出值,可以是变量,也可以是对象.属性}}
{%执行代码段%}

定义index.html模板

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
  <title>首页</title>
</head>
<body>
<h1>图书列表</h1>
<ul>
{%for book in booklist%}
<li>
  <a href="{{book.id}}">
    {{book.btitle}}
  </a>
</li>
{%endfor%}
</ul>
</body>
</html>

定义detail.html模板

  • 在模板中访问对象成员时,都以属性的方式访问,即方法也不能加括号
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
  <title>详细页</title>
</head>
<body>
<h1>{{book.btitle}}</h1>
<ul>
  {%for hero in book.heroinfo_set.all%}
  <li>{{hero.hname}}---{{hero.hcontent}}</li>
  {%endfor%}
</ul>
</body>
</html>

使用模板

  • 编辑views.py文件,在方法中调用模板
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.http import HttpResponse
from django.template import RequestContext, loader
from models import BookInfo

def index(request):
    booklist = BookInfo.objects.all()
    template = loader.get_template('booktest/index.html')
    context = RequestContext(request, {'booklist': booklist})
    return HttpResponse(template.render(context))


def detail(reqeust, id):
    book = BookInfo.objects.get(pk=id)
    template = loader.get_template('booktest/detail.html')
    context = RequestContext(reqeust, {'book': book})
    return HttpResponse(template.render(context))

去除模板的硬编码

  • 在index.html模板中,超链接是硬编码的,此时的请求地址为“127.0.0.1/1/”
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a href="{{book.id}}">
  • 看如下情况:将urlconf中详细页改为如下,链接就找不到了
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
url(r'^book/([0-9]+)/$', views.detail),
  • 此时的请求地址应该为“127.0.0.1/book/1/”
  • 问题总结:如果在模板中地址硬编码,将来urlconf修改后,地址将失效
  • 解决:使用命名的url设置超链接
  • 修改test1/urls.py文件,在include中设置namespace
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
url(r'^admin/', include(admin.site.urls, namespace='booktest')),
  • 修改booktest/urls.py文件,设置name
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
url(r'^book/([0-9]+)/$', views.detail, name="detail"),
  • 修改index.html模板中的链接
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a href="{%url 'booktest:detail' book.id%}">

Render简写

  • Django提供了函数Render()简化视图调用模板、构造上下文
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.shortcuts import render
from models import BookInfo

def index(reqeust):
    booklist = BookInfo.objects.all()
    return render(reqeust, 'booktest/index.html', {'booklist': booklist})


def detail(reqeust, id):
    book = BookInfo.objects.get(pk=id)
    return render(reqeust, 'booktest/detail.html', {'book': book})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Django 1.10中文文档-第一个应用Part3-视图和模板
目录[-] 本教程上接Django 1.10中文文档-第一个应用Part2-模型和管理站点。我们将继续开发网页投票这个应用,主要讲如何创建一个对用户开放的界面。 概览 视图是Django应用中的一“类”网页,它通常使用一个特定的函数提供服务,并且具有一个特定的模板。例如,在博客应用中,可能有以下视图: 博客首页 —— 显示最新发表的博客; 博客“详细”页面 —— 每博客的链接页面; 基于年份的归档页面 —— 显示特定年内所有月份发表过的博客; 基于月份的归档页面 —— 显示特定月份内
jhao104
2018/03/20
2.5K0
Django快速入门——投票程序(3)视图
原教程说的比较抽象,这里简单认为视图就是views.py中的函数,用于处理数据并渲染网页。我们的投票应用中,需要下列几个视图:
一只大鸽子
2023/09/02
3120
Django快速入门——投票程序(3)视图
Django 学习笔记 1.3 视图和模板
前一节是后端的内容,这一节则是前端的内容,我们将继续编写投票应用,并且专注于如何创建公用界面——也被称为“视图”。
twowinter
2020/04/17
1.3K0
Django Response对象3.4
HttpResponse对象 在django.http模块中定义了HttpResponse对象的API HttpRequest对象由Django自动创建,HttpResponse对象由程序员创建 不调用模板,直接返回数据 #coding=utf-8 from django.http import HttpResponse def index(request): return HttpResponse('你好') 调用模板 from django.http import HttpResponse f
Lansonli
2021/10/09
9110
Django -- 视图是啥?模板是何物?
在Django的官方文档中是这么定义视图的: "一类具有相同功能和模板的网页的集合",概念比较抽象,我们直接 拿比较简单常见论坛网站来举例,可能要求创建以下视图:
周辰晨
2020/01/20
1.1K0
Django -- 视图是啥?模板是何物?
django 1.8 官方文档翻译: 1-2-3 编写你的第一个Django应用,第3部分
本教程上接 教程 第2部分 。我们将继续 开发 Web-poll 应用并且专注在创建公共界面 – “视图 (views )”。
ApacheCN_飞龙
2022/11/27
2K0
Django来敲门~第一部分【6.2 HTML视图模板】
天下难事必作於易。天下大事必作於细。是以圣人终不为大,故能成其大 ——老子《道德经》
大牧莫邪
2018/08/27
1K0
Django—入门
举个简单的例子,对于一个公司来说,公司中有各个职能部门,每个部门各司其职,通过部门之间的配合来完成工作,这些部门就形成了一个公司的组织架构。从某种意义上来说,公司就是一种框架。那么对应到软件设计上来说,软件框架是由其中的各个模块组成的,每个模块负责特定的功能,模块与模块之间相互协作来完成软件开发。
py3study
2020/01/16
1.9K0
Django—入门
Python-Django 第一个Django app
下载地址:https://www.python.org/downloads/release/python-340/
授客
2019/09/11
1.3K0
Python-Django 第一个Django app
First Django App!
  上篇笔记从零创建了一个django项目,一个项目肯定是由多个模块组成的,比方说一个电商项目,包括支付模块,商品展示模块,商家用户聊天模块等等,这些模块便可称之为一个应用。
小孙同学
2022/01/17
2.2K0
First Django App!
django2.0入门教程第三节
继上篇django2.0入门教程第二节,介绍了对django2.0模型类models的操作,本篇主要讲视图views和模板template django的视图用于处理url请求,并将响应的数据传递到模板,最终浏览器将模板数据进行渲染显示,用户就得到了想要的结果 作为一个简易的投票系统, 除了index(主页), 还需要detail(详情页), results(结果页), vote(投票页) 这些视图。 增加视图:polls/views.py #_*_coding:utf8_*_ from django.sh
章鱼喵
2018/06/21
6900
Django学习笔记 1.4 表单和通用视图
更新一下在上一个教程中编写的投票详细页面的模板 (“polls/detail.html”) ,增加一个 HTML 元素:
twowinter
2020/04/17
8350
七日Python之路--第三天(之初试Django 2-2)
接上文。前面(1)(2)部分已经实现浏览器访问工程项目,并且能后台管理新创建的app。
lpe234
2020/07/27
3790
Django 1.10中文文档-第一个应用Part4-表单和通用视图
目录[-] 本教程接Part3开始。继续网页投票应用程序,并将重点介绍简单的表单处理和精简代码。 一个简单表单 更新一下在上一个教程中编写的投票详细页面的模板polls/detail.html,让它包含一个HTML<form> 元素: # polls/templates/polls/detail.html <h1>{{ question.question_text }}</h1> {% if error_message %}<p><strong>{{ error_message }}</stron
jhao104
2018/03/20
2.5K0
二、路由、模板
一、路由系统 在settings.py文件中通过ROOT_URLCONF指定根级url的配置 urlpatterns是一个url()实例的列表 一个url()对象包括: 正则表达式 视图函数 名称name 编写URLconf的注意: 若要从url中捕获一个值,需要在它周围设置一对圆括号 不需要添加一个前导的反斜杠,如应该写作'test/',而不应该写作'/test/' 每个正则表达式前面的r表示字符串不转义 请求的url被看做是一个普通的python字符串,进行匹配时不包括get或post请求的参数及域
酱紫安
2018/04/16
1.9K0
Django—视图
视图负责接受Web请求HttpRequest,进行逻辑处理,返回Web响应HttpResponse给请求者。
py3study
2020/01/16
4.5K0
Django—视图
Django 视图URLconf3.1
URLconf 在settings.py文件中通过ROOT_URLCONF指定根级url的配置 urlpatterns是一个url()实例的列表 一个url()对象包括: 正则表达式 视图函数 名称name 编写URLconf的注意: 若要从url中捕获一个值,需要在它周围设置一对圆括号 不需要添加一个前导的反斜杠,如应该写作'test/',而不应该写作'/test/' 每个正则表达式前面的r表示字符串不转义 请求的url被看做是一个普通的python字符串,进行匹配时不包括get或post
Lansonli
2021/10/09
4730
Django - - - -视图层之视图函数(views)
视图层之视图函数(views) 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你的Python目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为views.py的文件中。 视图函数:     一
用户1214487
2018/01/24
1.6K0
Django - - - -视图层之视图函数(views)
Django学习模板(7)
前面学了视图,我们可以在访问 localhost:8000/polls/ 看到我们返回的内容。
萌海无涯
2019/09/03
4500
Django学习模板(7)
Django知识点
一、Django pip3 install django C:\Python35\Scripts # 创建Django工程 django-admin startproject 【工程名称】 mysite - mysite # 对整个程序进行配置 - init - settings # 配置文件
院长技术
2021/02/19
8600
相关推荐
Django 1.10中文文档-第一个应用Part3-视图和模板
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验