视图

  • 在django中,视图对WEB请求进行回应
  • 视图接收reqeust对象作为第一个参数,包含了请求的信息
  • 视图就是一个Python函数,被定义在views.py中
#coding:utf-8
from django.http import HttpResponsedef 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模块
url(r'^', include('booktest.urls')),
  • 在booktest中的urls.py中添加urlconf
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值
'DIRS': [os.path.join(BASE_DIR, 'templates')],
  • 在模板中访问视图传递的数据
{{输出值,可以是变量,也可以是对象.属性}}
{%执行代码段%}

定义index.html模板

<!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模板

  • 在模板中访问对象成员时,都以属性的方式访问,即方法也不能加括号
<!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文件,在方法中调用模板
from django.http import HttpResponse
from django.template import RequestContext, loader
from models import BookInfodef 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/”
<a href="{{book.id}}">
  • 看如下情况:将urlconf中详细页改为如下,链接就找不到了
url(r'^book/([0-9]+)/$', views.detail),
  • 此时的请求地址应该为“127.0.0.1/book/1/”
  • 问题总结:如果在模板中地址硬编码,将来urlconf修改后,地址将失效
  • 解决:使用命名的url设置超链接
  • 修改test1/urls.py文件,在include中设置namespace
url(r'^admin/', include(admin.site.urls, namespace='booktest')),
  • 修改booktest/urls.py文件,设置name
url(r'^book/([0-9]+)/$', views.detail, name="detail"),
  • 修改index.html模板中的链接
<a href="{%url 'booktest:detail' book.id%}">

Render简写

  • Django提供了函数Render()简化视图调用模板、构造上下文
from django.shortcuts import render
from models import BookInfodef 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})

Django 视图和模板1.4相关推荐

  1. Django视图与模板+vs2019

    View视图,负责业务逻辑,并在适当的时候调用Model和Template http请求中产生的两个核心的对象:HttpRequest(http请求),HttpResponse(http响应) req ...

  2. Django 视图URLconf3.1

    URLconf 在settings.py文件中通过ROOT_URLCONF指定根级url的配置 urlpatterns是一个url()实例的列表 一个url()对象包括: 正则表达式 视图函数 名称n ...

  3. [diango]理解django视图工作原理

    前言:正确理解django视图view,模型model,模板的概念及其之间的关联关系,才能快速学习并上手使用django制作网页 本文主要讲解自己在学习django后对视图view的理解 在进入正文之 ...

  4. Django 笔记4 -- 模板

    Django 笔记4 – 模板 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django官 ...

  5. Django框架(23.Django中的模板的标签、变量、过滤器和注释)

    模板 作为Web框架,Django提供了模板,用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器.模版致力于表达外观 ...

  6. Django视图(二)

    Django视图(二) 文章目录 Django视图(二) 一.HttpReqeust对象 1.QueryDict对象 2.GET属性 3.POST属性 二.HttpResponse对象 1.属性 2. ...

  7. Django视图(一)

    Django视图(一) 文章目录 Django视图(一) 一.视图 1.视图简介 2.视图的功能 3.使用视图的过程 4.内置错误视图 二.URLconf 1.配置 2.语法 3.获取值 三.Http ...

  8. Django视图、URL、模版简介

    Django视图.URL.模版简介 文章目录 Django视图.URL.模版简介 一.视图 1.简介 2.使用视图时需要进行两步操作: 3.定义视图 二.配置URLconf 1.查找视图的过程 2.U ...

  9. 修改了模板文件tpl如何立即生效_Views视图与模板

    一.概述 用户请求到视图流程: 当有人访问我们django项目的时候 例如127.0.0.1:8000/polls/23,django首先到加载mysite.urls模块 在mysite.urls中发 ...

最新文章

  1. 没想到我提前56年感受了赛博朋克
  2. PHP 权威代码风格规范
  3. java注解大全_java开发注解大全
  4. python爬虫 单线程的多任务异步协程
  5. 我是如何走上前端开发这条路 并常年保持一线竞争力的
  6. 开发指南专题十一:JEECG微云快速开发平台--基础用户权限
  7. linux修改ip配置文件_协助调试Linux服务器经验分享
  8. GL-关于intercopany 和intracompany 的个人理解
  9. android 触摸屏(TP)问题现象分析和解决方法
  10. ubuntu16.04打造vim和python3的IDE
  11. css工程师技巧,web前端工程师必须掌握的技巧–CSS Sprites技术(附基础操作教程)...
  12. 【Cocos2d-Js基础教学(2)类的使用和面向对象】
  13. 重要知识结构-持续更新中
  14. 原子结构示意图全部_原子结构示意图知识点总结
  15. 11种基于ARM的嵌入式操作系统
  16. 【资料】wod旗帜,纹章
  17. 将List集合用字符串,逗号隔开进行拼接
  18. Possible solution: - Disable offline mode and rerun the build
  19. html textarea 缩放,textarea自动撑开缩放
  20. Visual and Object Geo-localization: A Comprehensive Survey

热门文章

  1. 伍六七带你学算法 进阶篇-排序算法
  2. docker停止、删除容器、删除镜像 一看就理解
  3. 大数据与数据挖掘考试题_北京2020届中考物理出题策略大揭秘!
  4. python装饰器学习
  5. 什么是码元计算机通信
  6. X-Deep Learning功能模块
  7. Django Request对象3.3
  8. HarmonyOS ScrollView 不滑动的问题
  9. .svn提交项目提示更新副本
  10. MSDN 教程短片 WPF 16(Path路径)