【day 13】python编程:从入门到实践学习笔记-基于Django框架的Web开发-Django入门(四)
2018-03-25 16:29
971 查看
学习笔记目录
【day 1】python编程:从入门到实践学习笔记-安装、变量和简单数据类型
【day 2】python编程:从入门到实践学习笔记-列表以及其操作
【day 3】python编程:从入门到实践学习笔记-if 语句(末附练习答案代码)
【day 4】python编程:从入门到实践学习笔记-字典(末附练习答案代码)
【day 5】python编程:从入门到实践学习笔记-用户输入和while循环(末附答案代码)
【day 6】python编程:从入门到实践学习笔记-函数(末附练习答案代码)
【day 7】python编程:从入门到实践学习笔记-类(末附练习答案代码)
【day 8】python编程:从入门到实践学习笔记-文件和异常(末附练习答案代码)
【day 9】python编程:从入门到实践学习笔记-测试代码(末附练习答案代码)
【day 10】python编程:从入门到实践学习笔记-Django入门(一)
【day 11】python编程:从入门到实践学习笔记-Django入门(二)
【day 12】python编程:从入门到实践学习笔记-Django入门(三)
【day 13】python编程:从入门到实践学习笔记-Django入门(四)
【day 14】python编程:从入门到实践学习笔记-用户账户(一)
【day 15】python编程:从入门到实践学习笔记-用户账户(二)
【day 16】python编程:从入门到实践学习笔记-用户账户(三)
【day 17】python编程:从入门到实践学习笔记-设计样式和部署(一)
【day 18】python编程:从入门到实践学习笔记-设计样式和部署(二)
模板继承
编写一个包含通用元素的父模板,并让每个网页都继承这个模板,而不必在每个网页中重复定义这些通用元素。这样我们可以专注于开发每个网页的独特部分。
1.父模板
创建名为base.html的模板,和index.html放在同一个目录,这个文件包含所有页面都有的元素——顶端的标题。
在第二行中使用了一个模板标签,模板标签使用大括号和百分号(
模板标签
在结尾中插入了一对块标签,这个块名为content,是一个占位符,其包含的信息将由子模板指定。
2.子模板
重新修改index.html
子模板第一行
第二行,我们插入了content的
最后一行,
显示所有主题的页面
1.URL模式
新添加的正则表达式表示匹配的URL为:基础URL后面跟着topics。接着匹配成功的话将请求都交给views.py中的函数
2.视图
函数
首先导入与所需数据相关联的模型。接着函数
函数的第二行表示查询数据库,请求Topic对象,并按属性date_added对数据进行排序。最后把返回的查询集春处在topics变量中。
函数的第三行定义了一个发给模板的上下文:是一个字典,其中的键是模板中用来访问数据的名称,值是发送给模板的数据。
函数返回的时候,即创建使用数据的网页时,我们把对象request和模板路径,还有变量context传递给
3.模板
创建一个文件 topics.html 和 index.html 同一文件夹。
首先继承父模板,接着定义content块。接着使用for循环的模板标签遍历字典context的列表topics。在模板中,不能使用缩进来表示循环结束,应当使用标签
循环中间的模板标签
最后修改父模板,使其包含显示所有主题的页面连接:
运行本地服务器可以看到
成功了!
显示特定主题的网页
1.URL模式
显示特定主题的页面的URL模式与前面的不同,因为其将使用主题的id属性来指出请求的是哪个主题。
+
这个模式匹配成功时,将会调用视图函数
2.视图
函数
3.模板
创建一个文件 topic.html 和 index.html 同一文件夹。
因为我们变量topic包含在字典context中,所以我们可以使用他。
每个项目列表项都将列出两项信息:条目的时间戳和完整的文本。列出时间戳date_added的值,我们可以在模板中使用竖线(
过滤器
过滤器
4.将显示所有主题的页面中的每个主题都设置为链接
修改topics.html
运行本地服务器可以看到
【day 1】python编程:从入门到实践学习笔记-安装、变量和简单数据类型
【day 2】python编程:从入门到实践学习笔记-列表以及其操作
【day 3】python编程:从入门到实践学习笔记-if 语句(末附练习答案代码)
【day 4】python编程:从入门到实践学习笔记-字典(末附练习答案代码)
【day 5】python编程:从入门到实践学习笔记-用户输入和while循环(末附答案代码)
【day 6】python编程:从入门到实践学习笔记-函数(末附练习答案代码)
【day 7】python编程:从入门到实践学习笔记-类(末附练习答案代码)
【day 8】python编程:从入门到实践学习笔记-文件和异常(末附练习答案代码)
【day 9】python编程:从入门到实践学习笔记-测试代码(末附练习答案代码)
【day 10】python编程:从入门到实践学习笔记-Django入门(一)
【day 11】python编程:从入门到实践学习笔记-Django入门(二)
【day 12】python编程:从入门到实践学习笔记-Django入门(三)
【day 13】python编程:从入门到实践学习笔记-Django入门(四)
【day 14】python编程:从入门到实践学习笔记-用户账户(一)
【day 15】python编程:从入门到实践学习笔记-用户账户(二)
【day 16】python编程:从入门到实践学习笔记-用户账户(三)
【day 17】python编程:从入门到实践学习笔记-设计样式和部署(一)
【day 18】python编程:从入门到实践学习笔记-设计样式和部署(二)
第十八章 Django入门(四)
创建其他网页
我们接下来扩充“学习笔记”项目,创建两个显示数据的网页,其中一个列出所有的主题,另一个显示特定主题的所有条目。模板继承
编写一个包含通用元素的父模板,并让每个网页都继承这个模板,而不必在每个网页中重复定义这些通用元素。这样我们可以专注于开发每个网页的独特部分。
1.父模板
创建名为base.html的模板,和index.html放在同一个目录,这个文件包含所有页面都有的元素——顶端的标题。
<p> <a href="{% url 'learning_logs:index' %}">Learning Log</a> </p> {% block content %}{% endblock content %}
在第二行中使用了一个模板标签,模板标签使用大括号和百分号(
{% %})表示,其是一小段生成网页中显示信息的代码。
模板标签
{% url 'learning_logs:index' %}生成一个URL,该URL与learning_logs/urls.py中定义的名为index的URL模式匹配。在这个示例中,learning_logs是一个命名空间,而index是该命名空间中的一个名称独特的URL模式。
在结尾中插入了一对块标签,这个块名为content,是一个占位符,其包含的信息将由子模板指定。
2.子模板
重新修改index.html
{% extends "learning_logs/base.html" %} {% block content %} <p>Learning Log helps you keep track of your learning, for any topic you're learning about.</p> {% endblock content %}
子模板第一行
{% extends %}表示继承了指定的父模板。这行代码会导入base.html的所有内容,让index.html的内容能够添加在父模板预留的content块中。
第二行,我们插入了content的
{% content %}标签,以定义content块。不是从父模板继承的内容都包含在里边。
最后一行,
{% endblock content %}表示定义结束。
显示所有主题的页面
1.URL模式
#learning_logs/urls.py from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index, name='index'), url(r'^topics/$', views.topics, name='topics'), ]
新添加的正则表达式表示匹配的URL为:基础URL后面跟着topics。接着匹配成功的话将请求都交给views.py中的函数
topics()进行处理。
2.视图
函数
topics()需要从数据库获取数据,发送给模板。
from django.shortcuts import render from .models import Topic def index(request): return render(request, 'learning_logs/index.html') def topics(request): topics = Topic.objects.order_by('date_added') context = {'topics': topics} return render(request, 'learning_logs/topics.html', context)
首先导入与所需数据相关联的模型。接着函数
topics()包含一个形参:从服务器收到的request对象。
函数的第二行表示查询数据库,请求Topic对象,并按属性date_added对数据进行排序。最后把返回的查询集春处在topics变量中。
函数的第三行定义了一个发给模板的上下文:是一个字典,其中的键是模板中用来访问数据的名称,值是发送给模板的数据。
函数返回的时候,即创建使用数据的网页时,我们把对象request和模板路径,还有变量context传递给
render()。
3.模板
创建一个文件 topics.html 和 index.html 同一文件夹。
{% extends "learning_logs/base.html" %} {% block content %} <p>Topics</p> <ul> {% for topic in topics %} <li>{{ topic }}</li> {% empty %} <li>No topics have been added yet.</li> {% endfor %} </ul> {% endblock content %}
首先继承父模板,接着定义content块。接着使用for循环的模板标签遍历字典context的列表topics。在模板中,不能使用缩进来表示循环结束,应当使用标签
{% endfor %}来指出循环的结束。双花括号(
{{ topic }})里的模板变量都会被替换为topic的当前值。
循环中间的模板标签
{% empty %}告诉django在列表topics为空时该怎么办:这里是打印一条消息,告诉用户
No topics have been added yet.。
最后修改父模板,使其包含显示所有主题的页面连接:
<p> <a href="{% url 'learning_logs:index' %}">Learning Log</a> - <a href="{% url 'learning_logs:topics' %}">Topics</a> </p> {% block content %}{% endblock content %}
运行本地服务器可以看到
成功了!
显示特定主题的网页
1.URL模式
#learning_logs/urls.py from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index, name='index'), url(r'^topics/$', views.topics, name='topics'), url(r'^topics/(?P<topic_id>\d+)/$', views.topic, name='topic'), ]
显示特定主题的页面的URL模式与前面的不同,因为其将使用主题的id属性来指出请求的是哪个主题。
+
r'^topics/(?P<topic_id>\d+)/$'中的第二部分
/(?P<topic_id>\d+)/表示与包含在两个斜杠内的整数匹配,并将这个整数存储在实参topic_id中。这部分表达式两边的括号捕获URL中的值;
?P<topic_id>将匹配的值存储到topic_id中;
\d+与包含在两个斜杠内的任何数字都匹配,不管其多少位。
这个模式匹配成功时,将会调用视图函数
topic(),并把topic_id的值作为实参传递进去。
2.视图
from django.shortcuts import render from .models import Topic def index(request): return render(request, 'learning_logs/index.html') def topics(request): topics = Topic.objects.order_by('date_added') context = {'topics': topics} return render(request, 'learning_logs/topics.html', context)
def topic(request, topic_id):
topic = Topic.objects.get(id=topic_id)
entries = topic.entry_set.order_by('-date_added')
context = {'topic': topic, 'entries': entries}
return render(request, 'learning_logs/topic.html', context)
函数
get()获取指定的主题。data_added前面的减号指定按降序排列,即先显示最近的条目。
3.模板
创建一个文件 topic.html 和 index.html 同一文件夹。
{% extends 'learning_logs/base.html' %} {% block content %} <p>Topic: {{ topic }}</p> <p>Entries:</p> <ul> {% for entry in entries %} <li> <p>{{ entry.date_added|date:'M d, Y H:i' }}</p> <p>{{ entry.text|linebreaks }}</p> </li> {% empty %} <li> There are no entries for this topic yet. </li> {% endfor %} </ul> {% endblock content %}
因为我们变量topic包含在字典context中,所以我们可以使用他。
每个项目列表项都将列出两项信息:条目的时间戳和完整的文本。列出时间戳date_added的值,我们可以在模板中使用竖线(
|)表示模板过滤器——对模板变量的值进行修改的函数。
过滤器
date:'M d, Y H:i'表示以这样的格式显示时间戳:
January 1, 2015 23:00。
过滤器
linebreaks表示自动换行。
4.将显示所有主题的页面中的每个主题都设置为链接
修改topics.html
{% extends "learning_logs/base.html" %} {% block content %} <p>Topics</p> <ul> {% for topic in topics %} <a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a> <!-- here --> {% empty %} <li>No topics have been added yet.</li> {% endfor %} </ul> {% endblock content %}
运行本地服务器可以看到
相关文章推荐
- 【day 14】python编程:从入门到实践学习笔记-基于Django框架的Web开发-用户账户(一)
- 【day 16】python编程:从入门到实践学习笔记-基于Django框架的Web开发-用户账户(三)
- 【day 12】python编程:从入门到实践学习笔记-基于Django框架的Web开发-Django入门(三)
- 【day 10】python编程:从入门到实践学习笔记- 基于Django框架的Web开发-Django入门(一)
- 【day 15】python编程:从入门到实践学习笔记-基于Django框架的Web开发-用户账户(二)
- 【day 17】python编程:从入门到实践学习笔记-基于Django框架的Web开发-设计样式和部署(一)
- 【day 8】python编程:从入门到实践学习笔记-文件和异常(末附答案代码)
- 【day 2】python编程:从入门到实践学习笔记-列表以及其操作
- 【day 9】python编程:从入门到实践学习笔记-测试代码(末附练习答案代码)
- 【day 4】python编程:从入门到实践学习笔记-字典(末附练习答案代码)
- 【day 5】python编程:从入门到实践学习笔记-用户输入和while循环(末答案)
- [置顶] 【day 1】python编程:从入门到实践学习笔记-安装、变量和简单数据类型
- Linux工程实践学习笔记——基于主机系统的多客户即时通讯/聊天室 Day(2)
- python编程:从入门到实践学习笔记(二)
- Linux工程实践学习笔记——基于主机系统的多客户即时通讯/聊天室 Day(3)
- Python学习 第二天任务 (二:【基于Python编程从入门到实践】第二章 数字和注释 书本及动手试一试)
- Linux工程实践学习笔记——基于主机系统的多客户即时通讯/聊天室 Day(1)
- 学习笔记_python_python编程从入门到实践3.0
- Python学习 第一天任务 (四:【基于Python编程从入门到实践】动手试一试)
- Django框架学习笔记(13.获取单表单数据的三种方式)