Django的模板templates原理初探索

简介:

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


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


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

wKioL1jslFux5My8AALSKD9npSA517.png

而本文的目的就是用实验的方法验证上面这张图,但是这个图是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节点:

1
2
3
4
5
6
7
8
9
10
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的内容如下:

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
< head >
     <title>欢迎使用我的运维平台< /title >
< /head >
<body>
欢迎您使用我的运维平台!
坦白从宽,抗拒从严,顽固到底,OK拜拜!
< /body >
< /html >


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

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


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

1
2
3
4
5
6
7
8
9
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端口来查看效果了。

wKiom1jslTLRbRcXAAAqk9qLJkY615.png

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


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


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

1
2
3
4
5
6
7
8
9
10
<!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路径加进去:

1
2
3
4
5
6
7
8
9
10
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/“就能看到我们预期的目标:

wKioL1jslZbz09QAAAI1IjkU_3w712.png

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


 

补充,本文涉及了一点python的正则知识,但是在django搭配网站里用到的正则都是很简单的,常用的正则如下:

wKioL1juFQCwAehFAAB5kuwDZUk787.png

有关正则表达式的更多内容,请访问 http://www.djangoproject.com/r/python/re-module/。


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

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




 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1914949

相关文章
|
1月前
|
中间件 应用服务中间件 nginx
Nginx+uWSGI+Django原理
Nginx+uWSGI+Django原理
|
2月前
|
Java C++ Python
django 模板 过滤器
django 模板 过滤器
|
2月前
|
Python
django 路由分发:原理
django 路由分发:原理
|
3月前
|
前端开发 JavaScript 数据库
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
|
3月前
|
JSON 数据处理 API
Django后端架构开发:视图与模板的正确使用
Django后端架构开发:视图与模板的正确使用
31 1
|
3月前
|
前端开发 Python
Django模板
【8月更文挑战第19天】
30 3
|
3月前
|
自然语言处理 前端开发 数据处理
Django的模板系统
【8月更文挑战第13天】
30 2
|
3月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
121 0
|
3月前
|
前端开发 数据处理 开发者
解锁Django模板系统终极奥义!揭秘高效前端渲染秘籍,让你的网站秒变炫酷黑科技!
【8月更文挑战第31天】Django作为Python的高级Web框架,内置的模板系统支持动态HTML渲染。本文通过在线书店案例,详细介绍Django模板系统的设置与高效渲染技巧,包括创建模板文件、编写视图函数及URL配置。通过合理使用过滤器、深度查询和模板继承等技巧,提升前端渲染效率和安全性,优化Web应用开发流程。
26 0
|
3月前
|
安全 JavaScript 前端开发
Django入门到放弃之模板及标签
Django入门到放弃之模板及标签