Excel不相邻列如何打印在一起-英雄云拓展知识分享
139
2023-11-07
【摘要】 本书摘自《Python+3自动化软件发布系统》一书中第2章,第6节,由陈刚、王洪军编著。
2.6.5 UrlConf 的命名空间
命名空间(namespace) 是表示标识符的可见范围。 一个标识符可在多个命名空 间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中 可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于 其他命名空间中。如果读者以前接触过Java 开发,那么对于命名空间的概念是很好 理解的。如果读者又接触过 k8s 集群,那么 namespace 的隔离作用在这里也是类 似的。
如果 name 没有作用域,则 Django 在反解 URL 时,会在项目全局顺序搜索,当 查找到第一个 name 指定的 URL 时,立即返回。
在开发项目时,会经常使用name 属性反解出URL 。 当不小心在不同的 App 的 urls 中定义相同的 name 时,可能会导致 URL 反解错误。为了避免这种事情发生, 引入了命名空间。
想象一下,如果A 同事开发的应用A 里有一个 URL, 命名为 index; 而 B 同事开 发的应用B 里也有一个 URL, 同样命名为index, 那么,Django 应该如何区分这两个 URL 呢?
Django 给出的解决方案就是命名空间。
按上面路由分发的思路,A 在自己应用的 urls.py 文件中,新增一个 app_name
'A'的命名空间;而 B 在自己应用的 urls.py 文件中,新增一个 app_name='B '的命
名空间。
经过这样一区分,如果想在模板中跳转到 A 的 index URL,则使用如下语法:
A index 如果想在模板中跳转到 B 的 index URL,则使用如下语法: B index如果想在 View 视图中跳转到A 的 index URL,则使用如下语法:
return HttpResponseRedirect(reverse('A:index')
如果想在View 视图中跳转到 B 的 index URL,则使用如下语法:
return HttpResponseRedirect(reverse('B:index ')
至于网上文档所称的应用程序命名空间和实例命名空间的区别,初学者暂时不 必去了解,那样会把自己绕晕的。等你真正将两个 URL 指向同一个 View 时,再来 学习也不迟。
2.7 Django 模板 Template
本节代码仍以2.6节为基础。在这一节,使用两种方法,即基于函数和类的方法 来实现一个带模板功能的 Django 服务。涉及的 Django 功能如图2- 11所示。
Django 模板是一些文本字符串,它既可以存在于文件当中(用于持久化),也可 以存在于内存当中(用于测试),其作用是把文档的表现与数据区分开。模板定义了 一些占位符和基本的逻辑(模板标签),并规定如何显示文档。而 Django 会使用模板 引擎来将一些上下文填充到占位符中。通常,模板用于生成 HTML, 不过 Django 模
板可以生成任何基于文本的格式。
使用模板大致有以下几个优点:
●将业务逻辑的 Python 代码和页面设计的 HTML 代码分离。
●使代码更干净整洁,更容易维护。
● 使Python 程序员和 HTML/CSS 程序员分工协作,提高生产效率。
● 将 HTML 代码分离出来,使其能够复用。
Django 新建项目完成后,在 settings 文件中的 Template 变量中,配置了一个默 认的模板引擎,即 django.template.backends.django.DjangoTemplates, 此引擎支持 Django Template Language(DTL) 。Django 1.8还支持另一个流行的模板引擎—— Jinja2 。 如果没有特别的理由更换后端,则应该使用DTL 。 如果编写的是可插入式 应用,而且带有模板,则更应该如此。
Django 包含模板的 contrib 应用,如 django.contrib.admin, 使用的就是 DTL。 本章的所有示例都将使用DTL。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~