模板继承:

1,修改主页

父模板:抽取通用元素,在index.html同级目录下新建base.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模式。

子模板:

index.html继承base.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在learning_logs文件夹中,因此父模板路径中包含learning_logs。
{% block %} 标签定义content 块,{% endblock content %} 指出了内容定义的结束位置。
 
打开http://localhost:8000/,报错django 'set' object is not reversible,如下:

解决办法:urls.py中将大括号修改为中括号(字典是无序的,所以报错不能逆转)

2,增加一个主题列表页面

  • 打开urls.py
urlpatterns = [
url(r'^$',views.index,name="index"),
# 显示所有的主题
url(r'^topics/$', views.topics, name='topics'),
]
  • 在views.py新增topics函数
from django.shortcuts import render
from .models import Topic # Create your views here.
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)
  • 在index.html同级目录下新建topic.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 %}
  • 修改base.html
<p>
<a href="{% url 'learning_logs:index' %}">Learning Log</a>
<a href="{% url 'learning_logs:topics' %}">Topics</a>
</p>
{% block content %}{% endblock content %}
  • 打开http://localhost:8000/

  点击Topic:

3,显示特定主题

  • urls.py
"""定义learning_logs的URL模式"""
from django.urls import re_path as url
# 让Python从当前的urls.py模块所在的文件夹中导入视图
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'),
]
  • views.py
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)
  • 新建topic.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:'Y M d, H:i' }}</p>
<p>{{ entry.text|linebreaks }}</p>
</li>
{% empty %}
<li>There are no entries for this topic yet.</li>
{% endfor %}
</ul>
{% endblock content %}
  • 打开topics.html,将每个主题加上链接
  <li>
<a href="{% url 'learning_logs:topic' topic.id %}">{{topic}}</a>
</li>
  • 打开http://localhost:8000/,点击Topic,点击某个主题:

最新文章

  1. 从AutoCAD和.NET开始
  2. Unplugging一个PDB
  3. [转]Golang Gob编码
  4. 大白话系列之C#委托与事件讲解(一)
  5. Android-取消GridView/ListView item被点击时的效果
  6. Chrome 自动填充的表单是淡黄色的背景怎么办!
  7. Eclipse 多行复制并且移动失效
  8. iOS -- Effective Objective-C 阅读笔记 (6)
  9. poll &amp; select
  10. RxSwift学习笔记7:buffer/window/map/flatMap/flatMapLatest/flatMapFirst/concatMap/scan/groupBy
  11. spring相关的maven依赖
  12. [转载]Javascript:history.go()和history.back()的用法和区别
  13. Linux实际常用命令
  14. Linux下的文件操作——基于文件描述符的文件操作(1)
  15. 【转】jieba.NET与Lucene.Net的集成
  16. springsource-tool-suite插件各个历史版本
  17. &lt;U+FEFF&gt; character showing up in files. How to remove them?
  18. Anchor、Dock
  19. ORACLE修改表空间方法
  20. 【LuoguP3038/[USACO11DEC]牧草种植Grass Planting】树链剖分+树状数组【树状数组的区间修改与区间查询】

热门文章

  1. Keil51单片机解决数字显示不稳的问题
  2. 在Mac的哪里可以找到bashrc文件
  3. 从零搭建hadoop集群之安装虚拟机
  4. (转) IIS隐藏响应头信息
  5. @EnableAspectJAutoProxy 注解的作用 —— 转载
  6. RxJava简要分析
  7. php 动态实例化某个类
  8. plsql和instantclient版本都对,依然不能初始化oci.dll解决办法
  9. C#连接数据库实现开发图书管理系统操作代码
  10. Dapper.FastCRUD与Dapper中的CustomPropertyTypeMap冲突