模板继承:

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,点击某个主题:

Python+Django(4)——创建其他网页(模板继承)的更多相关文章

  1. Django加载静态网页模板

    Django加载静态网页模板 步骤: 第一步:在子系统blog根目录下新建模版目录templates,里面新建一个login.html <!DOCTYPE html> <html l ...

  2. Python+Django+SAE系列教程10-----Django模板

    在本章中,我们开始模板,在前面的章节,您可能已经注意到,我们回到文本的方式有点特别的示例视图. 那.HTML直接在硬编码 Python 其中代码. 这的确是一个小BT. def current_dat ...

  3. Django(4)html模板继承、模板导入、分页实现

    1.获取所有请求信息 导入模块:from django.core.handlers.wsgi import WSGIRequest request.environ:包含所有的请求信息,可以打印看一下, ...

  4. day 48 ORM 进阶 多表连接 创建 以及 html模板继承

    多表的一对多创建 多表的多对多创建 多表的一对多修改 多表的多对多修改 前情提要:   最近认识了不少大佬,大佬开着保时捷. .一顿狂奔..我连车尾灯都看不到.. 本次内容  ORM 的多表链接  查 ...

  5. [Python] Django框架入门4——深入模板

    说明: 本文主要深入了解模板(templates),主要涉及模板编写步骤.定义模板.模板继承.HTML转义.CSRF等. 一.模板 动态生成HTML.表达外观.实现业务逻辑(view)与显示内容(te ...

  6. django 之创建自己的模板(使用案例)

    Django 创建自己的模板篇(实例) 此处需要创建模板,主要是对自己的模板进行扩展: 一般是扩展模板的tag和filter两个功能.可以用来创建你自己的tag和filter功能库. 创建模板库 分为 ...

  7. django css文件导入,模板继承

    今天写了一下模板继承 刚开始感觉还行,也挺简单的 当只有html的时候还是能继承到的,代码如下.首先在父html文件里加入 {% block content %} {% block extracss ...

  8. Django 中url补充以及模板继承

    Django中的URL补充 默认值 在url写路由关系的时候可以传递默认参数,如下: url(r'^index/', views.index,{"name":"root& ...

  9. Python Django ORM创建基本类以及生成数据结构

    #在项目目录下的modules.py中创建一个类,来自动生成一张表UserInfo class UserInfo(models.Model): username = models.CharField( ...

  10. python django项目创建及前期准备(使用pycharm)

    一.创建django项目 1.打开pycharm软件 2.点击菜单栏 File-->New Project,弹出如下对话框,如下图设置 二.基本配置 1.静态文件目录配置(用于客户端访问后台服务 ...

随机推荐

  1. matlab读写文件操作

    文件相对路径 在编码中尽可能使用相对路径: 1.当前路径下,直接:' xxx.bin ' 2.在下一级路径下,使用:' .\下一级路径文件名\xxx.bin ' 3.在上一级路径下,使用:' ..\x ...

  2. 高级测试工程师&资深测试工程师应实现的价值

    一 技能 自动化: 接口自动化 web ui 自动化(selenium) 移动端自动化 二 项目支撑----项目集,不是单个项目(大小项目) 1.具体功能web 2.小程序 3.移动端 三 项目职责 ...

  3. ctp认证权限

    现象: /sys/firmware/dmi/tables/smbios_entry_point: Permission denied/dev/mem: Permission denied/sys/fi ...

  4. 全链路压测SOP

    压测模型构建:人工 线上(大促)流量数据 (数据脱敏) 日常流量数据 业务方新的特性产生的变更数据 友商做过的事情 压测模型构建:自动 流程包括:录制-清洗-回放 (目前能做好的公司非常少) 压测标准 ...

  5. Odoo编程,说明,功能,文章收藏贴

    CN Blog: https://www.cnblogs.com/Firstwing/p/14088500.html #http://blog.sina.com.cn/s/blog_bc7dee2d0 ...

  6. .Net Core WebApi 控制器自动创建文件夹上传图片

    /// <summary> /// 异步图片或文件上传 /// </summary> /// <param name="formFile">&l ...

  7. docker和常用的中间件安装汇总

    一.背景:近期整理环境,汇总了下docker 安装常用的中间件,方便我们自己搭建个人的开发环境,做个记录 1.首先是docker 本身(centos)的安装: # 旧版本卸载 sudo yum rem ...

  8. 删除v-for方法生成的组件的方法

    一.思路 在vue:data中的数据对象添加布尔类型的属性,用来表明其是否被渲染,如果需要删除组件,就把这个属性设置为false: 在计算属性vue:computed中,根据该布尔属性过滤,生成一个新 ...

  9. Vue 的生命周期 详细解析(使用场景等)

    Vue生命周期图: 一.生命周期图的解读 new Vue():首先需要创建一个 Vue的实例对象 Init Events & Lifecycle :初始化:生命周期.事件(如:v-once), ...

  10. redis+token实现一个账号只能一个人登录

    自己在闲着没事的时候,突然想到了这么一个小功能,于是决定练习一下,首先想到的是如果一个账号只能一个人登录,可能会出现两个情况,一种是后登录者把前者的账号顶替掉,还有一种就是后者登录的时候会有提示当前账 ...