Django的模板templates原理初探索

[写在前面的话]这篇文章先发布在https://my.oschina.net/chenx124208739/blog/876964里了,但是公司的网络登录开源中国还是很困难,于是只能食言返回51cto(但是51cto把长代码转化代码格式的处理上真的很烂),就这样吧,在这里继续记录我的工作点滴!

运维的工作时间总是很零散的,首先要应付服务器的告警,然后还要伺候各路开发,再加上一些扩容、续费、开会这样的杂事,最后在烧香不出意外情况的前提下才能有一点时间是属于你自己拓展业务。从清明节结束一路忙到现在,终于算有点时间可以继续研究django,于是小虾我开始从零搭建一个django的运维平台。

django的页面原理其实用下面一张图就可以表达出来:

而本文的目的就是用实验的方法验证上面这张图,但是这个图是1.7+版本的django。而本次实验的django版本是1.10.3,主要是感受精神。

首先,我们在服务器里使用#django-admin startproject testoms,建立一个叫testoms的项目,然后在这个testoms里#python manage.py startapp app1#python manage.py startapp app2来建立两个应用。

创建了应用还要添加到testoms里去,修改 testoms的setting.py文件,把app1和app2加入到INSTALLED_APPS节点:

INSTALLED_APPS = [
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
        ‘app1‘,
        ‘app2‘,
]

来到testoms下app1的目录里手动建立一个叫templates的文件夹,在里面我们写一个叫hello.html的文件作为欢迎界面,hello.html的内容如下:

<!DOCTYPE html>
<html>
<head>
    <title>欢迎使用我的运维平台</title>
</head>
<body>
欢迎您使用我的运维平台!
坦白从宽,抗拒从严,顽固到底,OK拜拜!
</body>
</html>

保存,返回到app1这个文件夹里,修改一下views.py,这个文件是将刚刚我们写的html作为返回值,返回到浏览器上,我们把它修改成下面的样子:

def hello(request):
    return render(request, ‘hello.html‘)
#这里设定一个hello的函数,函数的内容就是反馈我们刚写的hello.html网页。

这个文件保存退出之后,返回到testoms这一层,修改urls.py,这个文件是指定网页文件的路径,我们把urls.py改成下面这个样子:

from django.conf.urls import url
from django.contrib import admin
from app1 import views as app1_views      #因为是app1这个应用里面的,所以这里要引入app1
urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^$‘, app1_views.hello,name=‘hello‘),   
#这里是python正则的只是,上面整句话指的是空路径的网页就是app1应用下面的views.py文件里提到的那个hello函数
#字符串有前面加“ r ”是为了防止字符串中出现类似“\t”字符时被转义
]

保存退出之后,在testoms文件夹里#python manage.py migrate同步一下我们的更改点,没有报错的话,就可以#python manage.py runserver 0.0.0.0:8000来在浏览器里访问服务器外网的8000端口来查看效果了。

可见我们的运维平台的首页就算是搭建起来了,当然这个界面做的十分简单,我们还需要前端的知识让它变得更漂亮一点。

现在我们的目的是要在浏览器里输入“服务器外网ip:8000/bye"这个地址的时候,出现一个再见界面。

那么跟上面app1里做一个hello.html的过程一样,我们在app2里建立一个templates文件夹然后写一个叫bye.html的网页,里面内容如下:

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}欢迎您再次使用{% endblock %}</title>
</head>
<body>
<font  face="黑体" color="red">欢迎您再次使用!</font>
        <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1491907238601&di=b575a7bf9bd645870b182fd5c92c1a89&imgtype=0&src=http%3A%2F%2Fphotocdn.sohu.com%2F20170407%2FImg486936907.jpeg"  alt="达康书记表情" />
</body>
</html>

然后要更改app2里的views.py,如法炮制的搞一个叫bye的函数,里面内容就是返回这个bye.html。

最后就是在testoms里的urls.py把/bye/这个url路径加进去:

from django.conf.urls import url
from django.contrib import admin
from app1 import views as app1_views
from app2 import views as app2_views      #别忘了要添加这一行,让python可以引用到app2
urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^$‘, app1_views.hello,name=‘hello‘),
    url(r‘^bye/$‘,app2_views.bye,name=‘bye‘),
#这句话是/bye/这个路径的url就返回app2文件里的views.py的bye函数,^和$是正则的内容,分别代表首尾
]

如果django一直没有关闭的话,重新#python manage.py migrate同步一下,然后去浏览器里输入“外网ip:8000/bye/“就能看到我们预期的目标:

注意:在http://www.ziqiangxuetang.com/django/django-template.html里,涂老师说为了防止“template查找不同的app而因为有重名的文件而找错”的情况。可以在templates再建立一个文件夹放置那些html文件,不过经本人验证,在1.10.3版本里不支持。所以为了避免这样的情况,还是劝各位干脆就不要有重名的html文件最好,一了百了。

参考资料:http://www.cnblogs.com/fnng/p/4373108.html

参考资料:http://www.ziqiangxuetang.com/django/django-template.html

时间: 2024-10-08 22:39:21

Django的模板templates原理初探索的相关文章

明明白白:python网站设计框架django的模板templates路径的最终解决方法

一个提示 SyntaxError: EOL while scanning string literal :反斜杆错误 \\ 不是 \ 我的mysite工程的整个目录: C:\web\mysite>tree /F 卷 C 的文件夹 PATH 列表 卷序列号为 00000200 0007:9B9B C:. │  db.sqlite3 │  manage.py │ ├─blog │  │  admin.py │  │  admin.pyc │  │  forms.py │  │  forms.pyc

Django框架之templates(模板)系统

一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 在Django的模板语言中按此语法使用:{{ 变量名 }}. 当模版引擎遇到一个变量,它将计算这个变量,然后用结果替换掉它本身.(可以理解为模板页面中先进行  “{{  }}和 {% %}”  中对应的数据的替换) 点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值. 内置Fil

python django -4 模板

模板介绍 作为Web框架,Django提供了模板,可以很便利的动态生成HTML 模版系统致力于表达外观,而不是程序逻辑 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用 模板包含 HTML的静态部分 动态插入内容部分 Django模板语言,简写DTL,定义在django.template包中 由startproject命令生成的settings.py定义关于模板的值: DIRS定义了一个目录列表,模板引擎按列表顺序

[Django学习]模板

模板介绍 作为Web框架,Django提供了模板,可以很便利的动态生成HTML 模版系统致力于表达外观,而不是程序逻辑 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用 模板包含 HTML的静态部分 动态插入内容部分 Django模板语言,简写DTL,定义在django.template包中 由startproject命令生成的settings.py定义关于模板的值: DIRS定义了一个目录列表,模板引擎按列表顺序

Django之模板Template

模板介绍 作为Web框架,Django提供了模板,可以很便利的动态生成HTML 模版系统致力于表达外观,而不是程序逻辑 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用 模板包含 HTML的静态部分 动态插入内容部分 Django模板语言,简写DTL,定义在django.template包中 由startproject命令生成的settings.py定义关于模板的值: DIRS定义了一个目录列表,模板引擎按列表顺序

01 Django web框架的原理

Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. socket服务端 import socket sk = socket.socket() sk.bind(("127.0.0.1", 80)) sk.listen() while True: conn, addr = sk.accept() data = conn.recv(8096) conn.send(b"O

第四章:Django 的模板系统(转)

在之前的章节中,你可能觉得例子中视图返回文本有点不妥.即是, HTML 是直接写在 Python 代码中的. 这种做法会导致这些问题: 要做任何设计上的更改就必须改写 Python 代码.网站的设计风格的更变一般来说会比更改后台的 Ptyhon 代码来得频繁,因此如果能够更改设计而不用更改 Python 变得尤为方便. 2 Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给不同的人员(甚至不同部门)来完成.设计人员和 HTML/CSS 编写人员都不应

phpcms模板生成原理

phpcms模板生成原理2009-09-25 16:14PHPCMS是功能强大的网站管理系统.以后有时间,俺要将其管理.使用.再开发等等都理顺出来.这一篇短文先介绍PHPCMS的模板机制. 所谓网站模板,就是生成网页的"模子",主要包括固定的图片.表格.颜色等美术风格,以及要从数据库输出的数据标签,还有简单的phpcms定义的语法(也可以是很复杂的php语法).PHPCMS每个网站的每个栏目,都可以设置不同的模板,最终栏目的网页都是一个"模子"里出来的,应此这个栏目

Mastering Django笔记 ch3 Templates

Django的模板 前后端分离:数据展现和业务逻辑的分离,设计页面和代码是两种分工 django模板: {{ var }}  变量 {% tag %} 模板tag {{ var | filter }}  filter django有自己的模板引擎,也可以通过配置使用其他的第三方引擎,django1.8引入了对Jinja2的支持. 作者建议,没有特殊原因还是使用django的模板DTL(Django Template Language) django模板直接在python code中的使用: >>