python编程:从入门到实践学习笔记-基于Django框架的Web开发-Django入门(四)

第十八章 Django入门(四)

创建其他网页

我们接下来扩充“学习笔记”项目,创建两个显示数据的网页,其中一个列出所有的主题,另一个显示特定主题的所有条目。

模板继承

编写一个包含通用元素的父模板,并让每个网页都继承这个模板,而不必在每个网页中重复定义这些通用元素。这样我们可以专注于开发每个网页的独特部分。

1.父模板

创建名为base.html的模板,和index.html放在同一个目录,这个文件包含所有页面都有的元素——顶端的标题。

在第二行中使用了一个模板标签,模板标签使用大括号和百分号()表示,其是一小段生成网页中显示信息的代码。

模板标签生成一个URL,该URL与learning_logs/urls.py中定义的名为index的URL模式匹配。在这个示例中,learning_logs是一个命名空间,而index是该命名空间中的一个名称独特的URL模式。

在结尾中插入了一对块标签,这个块名为content,是一个占位符,其包含的信息将由子模板指定。

2.子模板

重新修改index.html

子模板第一行表示继承了指定的父模板。这行代码会导入base.html的所有内容,让index.html的内容能够添加在父模板预留的content块中。

第二行,我们插入了content的标签,以定义content块。不是从父模板继承的内容都包含在里边。

最后一行,表示定义结束。

显示所有主题的页面

1.URL模式

新添加的正则表达式表示匹配的URL为:基础URL后面跟着topics。接着匹配成功的话将请求都交给views.py中的函数进行处理。

2.视图

函数需要从数据库获取数据,发送给模板。

首先导入与所需数据相关联的模型。接着函数包含一个形参:从服务器收到的request对象。

函数的第二行表示查询数据库,请求Topic对象,并按属性date_added对数据进行排序。最后把返回的查询集春处在topics变量中。

函数的第三行定义了一个发给模板的上下文:是一个字典,其中的键是模板中用来访问数据的名称,值是发送给模板的数据。

函数返回的时候,即创建使用数据的网页时,我们把对象request和模板路径,还有变量context传递给。

3.模板

创建一个文件 topics.html 和 index.html 同一文件夹。

首先继承父模板,接着定义content块。接着使用for循环的模板标签遍历字典context的列表topics。在模板中,不能使用缩进来表示循环结束,应当使用标签来指出循环的结束。双花括号()里的模板变量都会被替换为topic的当前值。

循环中间的模板标签告诉django在列表topics为空时该怎么办:这里是打印一条消息,告诉用户。

最后修改父模板,使其包含显示所有主题的页面连接:

运行本地服务器可以看到

成功了!

显示特定主题的网页

1.URL模式

显示特定主题的页面的URL模式与前面的不同,因为其将使用主题的id属性来指出请求的是哪个主题。

中的第二部分表示与包含在两个斜杠内的整数匹配,并将这个整数存储在实参topic_id中。这部分表达式两边的括号捕获URL中的值;将匹配的值存储到topic_id中;与包含在两个斜杠内的任何数字都匹配,不管其多少位。

这个模式匹配成功时,将会调用视图函数,并把topic_id的值作为实参传递进去。

2.视图

函数获取指定的主题。data_added前面的减号指定按降序排列,即先显示最近的条目。

3.模板

创建一个文件 topic.html 和 index.html 同一文件夹。

因为我们变量topic包含在字典context中,所以我们可以使用他。

每个项目列表项都将列出两项信息:条目的时间戳和完整的文本。列出时间戳date_added的值,我们可以在模板中使用竖线()表示模板过滤器——对模板变量的值进行修改的函数。

过滤器表示以这样的格式显示时间戳:。

过滤器表示自动换行。

4.将显示所有主题的页面中的每个主题都设置为链接

修改topics.html

运行本地服务器可以看到

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180410G0TM5X00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券