接着上节的继续学习,使用Django创建网页的过程通常分三个阶段:定义URL、编写视图和编写模板。首先,你必须定义URL模式,每个URL都被映射到特定的视图——视图函数获取并处理网页所需的数据。视图函数通常调用一个模板,后者生成浏览器能够理解的网页。为明白其中的工作原理,我们来创建学习笔记的主页。我们将定义该主页的URL、编写其视图函数并创建一个简单的模板。

一 创建网页:学习笔记主页

1 映射URL

用户通过在浏览器中输入URL以及单击链接来请求网页,因此我们需要确定项目需要哪些URL 。主页的URL 最重要, 它是用户用来访问项目的基础URL 。当前, 基础URL(http://localhost:8000/)返回默认的Django网站,让我们知道正确地建立了项目。我们将修改这一点,将这个基础URL映射到“学习笔记”的主页。打开项目主文件夹learning_log中的文件urls.py,你将看到如下代码:

from django.conf.urls import include,url

from django.contrib import admin

from django.urls import path

urlpatterns = [

path(‘admin/‘, admin.site.urls),

url(r‘‘, include(‘learning_logs.urls‘, namespace=‘learning_logs‘)),

]

默认的urls.py包含在文件夹learning_log中,现在我们需要在文件夹learning_logs中创建另一个urls.py文件:

#定义learning_logs的URL模式

from django.conf.urls import url

form . import views

urlpatterns=[

#主页

url(r‘^$‘,views.index,name=‘index‘)

]

实际的URL模式是一个对函数url()的调用,这个函数接受三个实参。第一个是一个正则表达式。Django在urlpatterns中查找与请求的URL字符串匹配的正则表达式,因此正则表达式定义了Django可查找的模式。

url()的第二个实参指定了要调用的视图函数。请求的URL与前述正则表达式匹配时,Django将调用views.index(这个视图函数将在下一节编写)。第三个实参将这个URL模式的名称指定为index,让我们能够在代码的其他地方引用它。每当需要提供到这个主页的链接时,我们都将使用这个名称,而不编写URL。

2 编写视图

视图函数接受请求中的信息,准备好生成网页所需的数据,再将这些数据发送给浏览器——这通常是使用定义了网页是什么样的模板实现的。

learning_logs中的文件views.py是你执行命令python manage.py startapp时自动生成的,当前其内容如下:

from django.shortcuts import render

当前,这个文件只导入了函数render(),它根据视图提供的数据渲染响应。下面的代码演示了该如何为主页编写视图:

from django.shortcuts import render

# Create your views here.

def index(request):

‘‘‘学习笔记的主页‘‘‘

return render(request,‘learning_logs/index.html‘)

3 编写模板

模板定义了网页的结构。模板指定了网页是什么样的,而每当网页被请求时,Django将填入相关的数据。模板让你能够访问视图提供的任何数据。我们的主页视图没有提供任何数据,因此相应的模板非常简单。

Learning Log

Learning Log helps you keep track of your learning, for any topic you‘re

learning about.

如果你请求这个项目的基础URL——http://localhost:8000/,将看到刚才创建的网页,而不是默认的Django网页。Django接受请求的URL,发现该URL与模式r‘^$‘匹配,因此调用函数views.index(),这将使用index.html包含的模板来渲染网页,结果如图:

提示:上面有一个问题,就是报一个错误:

path(r‘‘, include(‘learning_logs.urls‘, namespace=‘learning_logs‘) ),

File "D:\study\python\code\learning_log\11_env\lib\site-packages\django\urls\conf.py", line 39, in include

‘Specifying a namespace in include() without providing an app_name ‘

django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. Set the app_name attribute in the included module, or pass a 2-tuple containing the list of patterns and app_name instead.

一定要在D:\study\python\code\learning_log\learning_log下面的urls.py改成如下:

from django.conf.urls import include,url

from django.contrib import admin

from django.urls import path

urlpatterns = [

path(‘admin/‘, admin.site.urls),

path(r‘‘,include(‘learning_logs.urls‘, namespace=‘learning_logs‘)),

]

并在D:\study\python\code\learning_log\learning_logs下面的urls.py加上:app_name=‘learning_logs‘如下:

#定义learning_logs的URL模式

from django.conf.urls import url

from . import views

app_name=‘learning_logs‘

urlpatterns=[

#主页

url(r‘^$‘,views.index,name=‘index‘)

]

二 创建其他网页

制定创建网页的流程后,可以开始扩充“学习笔记”项目了。我们将创建两个显示数据的网页,其中一个列出所有的主题,另一个显示特定主题的所有条目。对于每个网页,我们都将指定URL模式,编写一个视图函数,并编写一个模板。但这样做之前,我们先创建一个父模板,项目中的其他模板都将继承它。

1 模板继承

父模板:

我们首先来创建一个名为base.html的模板,并将其存储在index.html所在的目录中。这个文件包含所有页面都有的元素;其他的模板都继承base.html。当前,所有页面都包含的元素只有顶端的标题。我们将在每个页面中包含这个模板,因此我们将这个标题设置为到主页的链接:

Learning Log

{% block content %}{% endblock content %}

2 子模板

现在需要重新编写index.html,使其继承base.html,如下所示:

{% extends "learning_logs/base.html" %}

{% block content %}

Learning Log helps you keep track of your learning, for any topic you‘re

learning about.

{% endblock content %}

今天有事就先写到这里吧,明天继续学习!

python项目实践_Python 项目实践三(Web应用程序)第二篇相关推荐

  1. 新书推荐 |《机器学习即服务:将Python机器学习创意快速转变为云端Web应用程序》...

    新书推荐 <机器学习即服务:将Python机器学习创意快速转变为云端Web应用程序> 点击上图了解及购买 谷歌云和Salesforce首选合作伙伴SpringML数据科学副总裁领衔撰写,讲 ...

  2. python加减乘除符号_Python项目如何合理组织规避import天坑

    本文共3500余字,预计阅读时间12分钟,本文知乎连接:Python项目如何合理组织规避import天坑,本文同步发布于silaoA的博客和微信公众号平. 关注学习了解更多的Cygwin.Linux. ...

  3. 易语言和python混合编程_Python脚本可以嵌入易语言程序吗 |

    易语言和python比哪个更好更容易 虽然我很支产,但我不说,易语言一无是处,它甚至不能称为一言,顶多算个IDE.python是一门脚本语言,功能还不错,但目前还不能编写手机软件.编程中出现乱码是非常 ...

  4. Python GUI案例之看图猜成语开发(第二篇)

    Python GUI案例之看图猜成语(第二篇) 前言 看图猜成语小程序开发(第二篇) 游戏选择模式页面 游戏训练模式页面 Python GUI案例之看图猜成语开发(第一篇) Python GUI案例之 ...

  5. python项目结构图_python项目

    泉州信息工程学院 软件学院 课程设计报告书 课 程 名: Python程序设计与高级应用 课程设计项目名称:春晚节目单分析 团队成员: 无 一.项目简介 1.1 项目博客地址 1.2 项目完成的功能与 ...

  6. python项目结构图_python 项目目录结构设置

    为项目设置目录结构是为了将功能类似的文件放置在同一目录内,增强项目的可读性和可维护性.如果一个python项目功能单一,代码量很小,那就没必要设置的这么复杂. 下图是一个示例项目的目录结构: 1,bi ...

  7. python三方库打包项目中_python项目生成及导入依赖的第三方库

    mac下的应用程序发布 及 打包(Python写的脚本,可打包第三方库) 其实这个问题在网上能搜到大把的解决方案.大家的统一答案都是 otool -L yourapp.app/Contents/Mac ...

  8. python项目报告书_python项目

    泉州信息工程学院 软件学院 课程设计报告书 课 程 名:python课程设计 课程设计项目名称:基于Django的音乐网站的设计与实现 团队成员:邹志圣 陈棋明 潘家梁 1.项目介绍 1.1本项目博客 ...

  9. python做项目管理_python项目实现配置统一管理的方法

    一个比较大的项目总是会涉及到很多的参数,最好的方法就是在一个地方统一管理这些参数.最近看了不少的python项目,总结了两种很有意思的配置管理方法. 第一种 基于easydict实现的配置管理 首先需 ...

最新文章

  1. selenium.common.exceptions.SessionNotCreatedException
  2. HIGHGUI ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
  3. ThingJS平台制作第一人称视角下的巡更效果
  4. 运行Pangolin时提示错误
  5. MYSQL端口自动开启的问题~
  6. 一个很不错的技术网站
  7. NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)
  8. cidr计算器android,JavaScript 实现 CIDR 详细信息计算
  9. phpStorm 配置关联php手册
  10. Js Switch语句
  11. 程序员月入好几万?10年老程序员告诉你真实的情况!!
  12. ABP VNext学习日记5
  13. 【狂神说】前端进阶串讲笔记总结
  14. c语言——游戏思路及其相关函数
  15. 用管理员权限打开vs2010并调试网页游戏辅助,使用WPE无法抓包的解决方法
  16. ES集成中文分词器: IK 3.0
  17. bartender在服务器系统,BarTender 2016系统要求
  18. 别蓝瘦,别香菇,微服务保驾企业服务
  19. 迪士尼收购HTML5游戏引擎公司Rocket Pack
  20. 计算机控制系统直流电机闭环调速实验,4.14直流电机闭环调速实验.pdf

热门文章

  1. Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找
  2. Anaconda 环境下 对Tushare进行测试
  3. 浅析data:image/png;base64的应用
  4. MySQL bin-log 日志清理方式
  5. 机器学习降维方法总结
  6. 类型转换_异常处理机制
  7. BZOJ 3870: Our happy ending( 状压dp )
  8. Nebula3的Input系统
  9. 世界无烟日丨如何科学戒烟?
  10. mac 源生安装mysql_docker安装MySQL数据库