Django 视图和模板1.4

简介: Django 视图和模板1.4

视图



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


#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模块


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页面,可以根据视图中传递的数据填充值

创建模板的目录如下图:


image.png


  • 修改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 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/”


<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 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})
目录
相关文章
|
3月前
|
Java C++ Python
django 模板 过滤器
django 模板 过滤器
|
4月前
|
前端开发 JavaScript 数据库
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
|
4月前
|
JSON 前端开发 API
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
65 2
|
4月前
|
JSON 数据处理 API
Django后端架构开发:视图与模板的正确使用
Django后端架构开发:视图与模板的正确使用
37 1
|
4月前
|
前端开发 Python
Django模板
【8月更文挑战第19天】
32 3
|
3月前
|
数据处理 Python
Django视图:构建动态Web页面的核心技术
Django视图:构建动态Web页面的核心技术
|
4月前
|
自然语言处理 前端开发 数据处理
Django的模板系统
【8月更文挑战第13天】
31 2
|
4月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
135 0
|
4月前
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
62 0
|
4月前
|
前端开发 数据处理 开发者
解锁Django模板系统终极奥义!揭秘高效前端渲染秘籍,让你的网站秒变炫酷黑科技!
【8月更文挑战第31天】Django作为Python的高级Web框架,内置的模板系统支持动态HTML渲染。本文通过在线书店案例,详细介绍Django模板系统的设置与高效渲染技巧,包括创建模板文件、编写视图函数及URL配置。通过合理使用过滤器、深度查询和模板继承等技巧,提升前端渲染效率和安全性,优化Web应用开发流程。
27 0