建立其余网页来扩充web_app项目,咱们将建立两个显示数据的网页,其中一个列出全部主题,另外一个显示特定主题的全部条目html
1.建立父模板web
父模板一般包含一些通用元素,并让每一个网页都继承这个模板,而不用再每一个网页重复定义这些通用元素,这种方法能让你专一于每一个网页的独特方面,而且能够轻松修改项目的总体外观正则表达式
1>建立一个名为base.html的模板,并将其存储在index.html所在的目录中,base.html包含全部页面都有的元素;其余模板都继承base.html。数据库
该文件的第一部分建立了一个包含项目名的段落,该段落是一个到主页的连接,{% %}是一个模板标签,生成要在网页中显示的信息;在这个实例中,模板标签服务器
{% url 'web_app:index' %}
生成一个URL,该URL与web_app/urls.py中定义的名为index的URL模式匹配(箭头1处),在该示例中,web_app是一个命名空间,而index是该命名空间中一个URL模式app
在箭头2处,插入了一对块标签。这个块名为content,是一个占位符,其中包含的信息将由子模版指定函数
注意:子模版并不是必须定义父模板中的每一个块,所以在父模板中,可以使用任意多个块来预留空间,而子模版可根据须要定义相应数量的块url
2.编写子模版,使其继承base.html3d
箭头1处表示将标题替换成了从父模板那里继承的代码,子模版的第一行必须包含标签{% extends % },让Django知道它继承了哪一个父模板htm
箭头2处插入了一个名为content的{% block %}标签,以定义content块,不是从父模板继承的内容都包含在content块中
箭头3处使用标签{% endblock content %}指出内容定义的结束位置
3.显示全部主题的页面
1>定义显示全部主题的URL。一般,使用一个简单的URL片断来指出网页的信息;咱们使用topics,所以http://127.0.0.1:8000/topics/将返回显示全部主题的页面,修改web_app下的urls.py
箭头1处在用于主页URL的正则表达式中添加了topics/,Django检查请求的URL时,这个模式与这样的URL匹配:基础URL后面跟着topics。其URL与该模式匹配的请求多将交给views.py中函数topics()进行处理
2>修改视图文件views.py
函数topics()须要从数据库中获取一些数据,并将其发送给模板
1处导入与所需数据相关联的模型
2处Django从服务器那里收到的request对象
3处查询数据库--请求提供Topic对象,并按属性date_added对它们进行排序,并将返回的查询集存储在topics中
4处定义一个将要发送给模板的上下文。上下文是一个字典,键是咱们将在模板中用来访问数据的名称,值是咱们要发送给模板的数据
5处将变量context传递给render()
3>模板
显示全部主题的页面的模板接受字典context,以便可以使用topics()提供的数据,建立topics.html,并存储在index.html所在的目录中
1处表示在标准的HTML中,项目列表被称为无序列表,用标签<ul></ul>表示
2处使用了一个至关于for循环的模板标签,它遍历context中的列表topics,注意在模板中,每一个for循环都必须使用{% endfor %}标签来显式的指出其结束位置
3处表示每次循环时{{ topic }}都被替换为topic的当前值
4处的模板标签{% empty %}表示在列表topics为空时该怎么办
4>修改父模板,使其包含到显示全部主题的页面连接
1处在主页连接后面添加了一个连字符,而后添加了一个到显示全部主题的页面连接 -- 使用的也是模板标签url(箭头2处)
2行让Django生成一个连接,它与web_app/urls.py中名为topics的URL模式匹配
4.运行manage.py