视图(views)与模板(templates)

1,视图(views)

​ 将接收到的数据赋值给模板(渲染),再传递给浏览器。HTML代码可以直接放在views.py(文件名可任意更换),也可以放在templates中以实现逻辑代码与HTML文件的解耦。

HTML放在views.py中

  • 创建views.py,之后输入以下代码:

    from django.http import HttpResponse
    from django.shortcuts import render def HelloWorld(request):
    return HttpResponse('<html><body> hello world! </body></html>')
  • 之后在urls.py中配置路由映射关系,输入以下代码:

    from django.contrib import admin
    from django.urls import path
    from django.conf.urls import url
    from . import views urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^hello/$', views.HelloWorld)
    ]
  • 之后打开网址 http://127.0.0.1:8001/hello/ 即可看到如下界面(地址与python manage.py runserver设定的地址相对应)

2,模板(templates)

​ 在1中,HTML文件直接写入了views.py中,也可以将HTML文件写入templates中,实现业务逻辑与前端渲染文件的解耦。

HTML放入templates中

  • 首先在项目中创建templates文件夹,此时项目的目录树结构为

    TEST1
    │ manage.py

    ├─templates
    └─test1
    │ asgi.py
    │ settings.py
    │ urls.py
    │ views.py
    │ wsgi.py
    │ __init__.py

    └─__pycache__
    settings.cpython-36.pyc
    urls.cpython-36.pyc
    views.cpython-36.pyc
    wsgi.cpython-36.pyc
    __init__.cpython-36.pyc
  • 将templates在settings.py中注册,settings.py进行如下修改:

    TEMPLATES = [
    {
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')], #增加该行代码
    'APP_DIRS': True,
    'OPTIONS': {
    'context_processors': [
    'django.template.context_processors.debug',
    'django.template.context_processors.request',
    'django.contrib.auth.context_processors.auth',
    'django.contrib.messages.context_processors.messages',
    ],
    },
    },
    ]
  • 在templates中创建html文件,输入如下代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    hello world! <br>
    {{name}}
    </body>
    </html>
  • 修改views.py的代码,此处使用render方法

    from django.http import HttpResponse
    from django.shortcuts import render def HelloWorld(request):
    return render(request, 'hello.html', {'name': 'tensor_zhang'})
    #注意此处使用字典填充{{name}}变量,这是django特有的
  • 在urls.py配置路由映射,由于我在这没有修改views.py的文件名以及其中的函数名,此次不用修改。

  • 打开网址 http://127.0.0.1:8001/hello/ 即可看到如下界面

3,总结

  1. views和templates将逻辑代码和html文件解耦,这样在对页面进行修改时,只需要专注于修改相应的前端html文件,而不用考虑对逻辑的修改。

  2. 页面的显示是由html文件控制的,只要对html文件进行修改,就可以得到想要的结果,比如将html文件改为:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body> hello world! <br>
    {{name}} <br> <!-- url跳转 -->
    <a href="https://www.cnblogs.com/tensorzhang/">
    tensor_zhang的博客园
    </a> <!-- 提交文件 -->
    <form>
    <input type="file" name="myfile">
    <input type="submit" value="提取文件">
    </form> </body>
    </html>

    页面就会相应的发生变化

【Django笔记1】-视图(views)与模板(templates)的更多相关文章

  1. Django基础之视图(views)层、模板层

    目录 Django基础之视图(views)层.模板层 JsonResponse 向前端返回一个json格式字符串的两种方式 重写Django中的json的某个方法 form表单上传文件 FBV与CBV ...

  2. Django笔记 —— 高级视图和URL配置

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  3. Django学习(二)---使用模板Templates

    学会使用渲染模板的方法来显示html内容. 一.Templates是什么: HTML文件 使用了Django模板语言(Django Tamplate Language DTL) 可以使用第三方模板 二 ...

  4. Django入门3:视图views

    1.获取用户请求数据 1.1 request.GET 获取request.method='GET'的数据 request.GET.get('name',None) 1.2 request.POST 获 ...

  5. django 中的视图(Views)

    Views Django中views里面的代码就是一个一个函数逻辑, 处理客户端(浏览器)发送的HTTPRequest, 然后返回HTTPResponse, http请求中产生两个核心对象: http ...

  6. django在视图中使用模板

    在视图中使用模板   在学习了模板系统的基础之后,现在让我们使用相关知识来创建视图. 重新打开我们在前一章在 mysite.views 中创建的 current_datetime 视图. 以下是其内容 ...

  7. Django:视图views(一)

    1.环境搭建 在django中,视图负责与web请求进行交互 视图本质上是一个Python函数,定义在booktest/views.py.通过django1/urls.py路由到该视图中. 首先经过创 ...

  8. Django-1版本的路由层、Django的视图层和模板层

    一.Django-1版本的路由层(URLconf) URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:我们就是以这种方式告诉Dja ...

  9. Django笔记 —— 模板高级进阶

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

随机推荐

  1. VuePress plugins All In One

    VuePress plugins All In One VuePress & element-ui & docs $ yarn add -D vuepress-plugin-demo- ...

  2. CSS event pass through

    CSS event pass through CSS 黑科技 / CSS 技巧: css 禁用点击事件, 实现事件冒泡的效果 https://caniuse.com/?search=CSS point ...

  3. 如何强制删除 baidu/tempdata/con.dat 的垃圾文件! How to fix locked SD card: 读卡器 损坏,补救措施!

    https://www.youtube.com/watch?v=y2c37dcxNto&feature=youtu.be 使用windows command prompt 强制删除 baidu ...

  4. JavaScript for, for...in, for...of, for-await...of difference All In One

    JavaScript for, for...in, for...of, for-await...of difference All In One for for...in for...of for-a ...

  5. TypeScript 3.7 RC & Assertion Functions

    TypeScript 3.7 RC & Assertion Functions assertion functions, assert https://devblogs.microsoft.c ...

  6. Flutter 使用 flare

    video flare_flutter 工作示例 install dependencies: flare_flutter: ^1.5.5 assets: - assets/flr/switch_day ...

  7. Flutter 可选择的Text

    Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, ...

  8. Flutter 创建dashboard页面

    1 import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends Sta ...

  9. C++ 中的智能指针-基础

    简介 在现代 C++ 编程中,标准库包含了智能指针(Smart pointers). 智能指针用来确保程序不会出现内存和资源的泄漏,并且是"异常安全"(exception-safe ...

  10. 死磕Spring之IoC篇 - 深入了解Spring IoC(面试题)

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...