这三部曲就是:html
- 定义urls映射
- 定义views
- 定义templates
什么是URL?
URL就算一个WEB地址,你在浏览器输入这个地址,而后浏览器返回相应的网页给你。 好比http://djangogirls.com是一个URL,而127.0.0.1:8000一样也是个URL,默认就是http协议的。前端
Django中的URL工做原理
咱们打开mysite/urls.py文件,会发现相似下面这样:python
1 |
from django.conf.urls import patterns, include, url |
上面的两行注释先不要管,这个之后再用到。 django默认已经为咱们添加了admin的URL配置。 当django碰到以admin/开头的URL的时候会去admin.site.urls里面去寻找对应的匹配。 全部和admin相关的urls配置都写在一个文件中,这样就便于管理了。linux
正则表达式
你能够看到上面的url用到了正则表达式,好比’^admin/’、’^$’等等, django是经过正则式来匹配URL的。关于正则式这里不想展开太多。能够参考相关数据和教程。git
第一个django url配置
如今咱们要将http://127.0.0.1:8000/这个首页地址映射到一个显示最新文章列表的页面上面去。通常的博客首页基本都是这样的。web
为了保持mysite/urls.py配置文件的简介,咱们最好将博客的url配置放到单独的文件中。在mysite/urls.py中去将它引进来便可。面试
那么你的mysite/urls.py文件如今相似于这样了:正则表达式
1 |
from django.conf.urls import patterns, include, url |
blog.urls
建立文件blog/urls.py,而后加入下列内容redis
1 |
from django.conf.urls import patterns, include, url |
如今咱们将r’^$’的url映射到视图views.post_list。算法
不过你要是如今就访问首页http://127.0.0.1:8000/的话会报错的。
为啥,由于你的视图views.post_list如今没有实现啊,找不到这个方法!
那么接下来咱们就来说解view的实现了。
什么是view?
view也叫视图,在django中它存放了实际的业务逻辑。这个跟咱们一般所说的MVC中的view是不同的。
django的MTV模式
这里我稍微解释下django的结构,通常咱们称之为MTV模式:
- M 表明模型(Model),即数据存取层。该层处理与数据相关的全部事务:如何存取、如何确认有效性、包含哪些行为以及数据之间的关系等。
- T 表明模板(Template),即表现层。该层处理与表现相关的决定:如何在页面或其余类型文档中进行显示。
- V 表明视图(View),即业务逻辑层。该层包含存取模型及调取恰当模板的相关逻辑。你能够把它看做模型与模板之间的桥梁。
那么一般意义的控制器Controller去哪里了呢,细心的童鞋应该会猜到了,那就是咱们上一节所讲的urls.py配置文件。
一句话总结:URLconf+MTV构成了django的整体架构。
blog/views.py
这个文件初始内容是这样的:
1 |
from django.shortcuts import render |
添加一个最简单的视图:
1 |
def post_list(request): |
咱们定义了一个方法post_list,它的参数是request,使用render函数返回一个html模板blog/post_list.html。
接下来咱们访问下首页,OMG,又出错了:
此次报的错是模板blog/post_list.html找不到。这个是显而易见的,由于咱们根本尚未定义这个html模板。
别着急,继续沿着教程往下看就行…
什么是模板?
一个模板就是一个使用固定格式呈现动态内容的可重用的文件。 好比你可使用一个模板来写邮件,每封邮件可能有不一样的内容,寄给不一样的人,可是它们的格式是同样的。
Django中的模板使用HTML文件,至于神马是HTML,这个去参考下W3C或者自行google下, 不过若是作web开发的人不懂HTML,请不要告诉别人我认识你。^_^
第一个模板
建立一个模板就是建立一个HTML文件。模板文件存储在blog/templates/blog目录下面, 首先在blog目录下建立templates目录,而后再在templates目录下建立blog目录,至于为啥要这么作, 先不用管,django里面不少目录都是约定好的,这个就跟maven是同样的,约定高于配置。 因此你先照着作就是了。目录结构以下:
blog |
而后在blog/templates/blog目录下建立一个post_list.html文件,如今里面尚未内容。
这时候再次访问首页,效果以下:
一片空白,但没有报错了。
在post_list.html中添加点东西:
1 |
<html> |
再次访问http://192.168.203.95:8000/:
动态模板
不过目前为止咱们还只能显示静态的网页。怎样将文章列表在首页显示出来呢?
咱们已经有了模型Post,有了模板post_list.html,怎样使得模型数据在模板中显示出来呢, 这个就是视图的功能了,实际上,django中的视图的做用就是链接模型和模板的桥梁。 在视图中,经过QuerySet将数据库中的数据检索出来,而后传递给模板,模板负责显示出来。
首先打开blog/views.py,它目前的内容是这样的:
1 |
from django.shortcuts import render |
这时候咱们将Post模型导入进来
1 |
from django.shortcuts import render |
注意咱们仍是用到了相对导入,这是python3的强大功能。
QuerySet
是时候请出QuerySet了,在模型和ORM小节咱们已经介绍过。
如今咱们想要将数据库中的文章都检索出来而且按照发布日期逆序排序,使得最新的文章放前面。
1 |
from django.shortcuts import render |
注意render函数中最后一个参数{‘posts’: posts},这个就是用来给模板传递数据的。
模板标签
HTML页面只识别HTML标签,那么怎样让生成动态的内容呢?答案就是使用django自带的模板标签, 包括了判断、循环、管道等语法。咱们已经获取了文章的列表了,那么可使用for循环来生成相应的HTML页面:
1 |
<html> |
在{% for %}
和{% endfor %}
之间会循环每一个post,而后每次生成一段
如今再次访问首页,效果以下:
别忘了一件事
别忘了把它push到pythonanywhere上面去。
git add . |
恭喜你,目前为止基本的全程已经贯通了。打开admin后添加几篇文章, 记得填上发布日期,再刷新下首页,看会不会显示出来。
好了,这时候你能够出门左拐去小卖部给本身买点棒棒糖奖励下本身了!
昵称:
退出登陆 订阅评论
[Ctrl+Enter快捷键提交]
【推荐】Google+GitHub联手打造前端工程师课程
【推荐】票选最美云上大数据暨大数据技术峰会