首页 > 编程语言 >Python+Django(4):创建其他网页(模板继承)

Python+Django(4):创建其他网页(模板继承)

时间:2023-02-15 17:47:09浏览次数:35  
标签:index logs Python topics Django topic html learning 模板

模板继承:

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

 

 

 

 

标签:index,logs,Python,topics,Django,topic,html,learning,模板
From: https://www.cnblogs.com/sxww-zyt/p/17123491.html

相关文章

  • Python黑客编程之数据加解密
    描述利用非对称密钥RSA和对称密钥AES算法对传输数据进行加密分析发送方本地保存有RSA公钥,发送数据前,利用AES算法对传输数据明文进行加密,利用RSA算法对AES的密钥进行......
  • python的学习之路Day4
    2023.2.15Day42023.2.15Day4今日内容概要主题:数据类型(先熟悉)字符串列表字典布尔元组集合与用户交互基本运算符今日内容详细字符串str#用来记录描述性......
  • flask_openv_video_streaming_来自miguelgrinberg大佬_写pythonsocketio的那个
    E:\song2\树莓派视频流\flask_opencv_video_stream\flask-video-streaming\app.py#!/usr/bin/envpythonfromimportlibimportimport_module#importosfromflaski......
  • vue-day03——js中的循环、key值在循环的作用、数组,对象的检测与更新、input时间、v-m
    目录一、js的几种循环方式1.1v-for可以循环的变量1.2js的循环方式二、key值的解释三、数组,对象的检测与更新四、input事件五、v-model双向数据绑定六、过滤案例七、事件......
  • Windows下Python安装MySQLdb
    下载whl列表地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient下载对应的版本,cp含义是CPython,例如:如果Python版本是3.9.11,就选cp39,如果Python版本是2.7.x,则......
  • fastai在Windows10多线程处理受限提示 “Due to IPython and Windows limitation, pyt
    fastai在Win10直接使用Jupyternotebook,会有这个限制提示dls=TextDataLoaders.from_folder(untar_data(URLs.IMDB),valid='test')“DuetoIPythonandWindowslimit......
  • Django——报错信息
    安装报错:报错信息:ValueError:nosignaturefoundforbuiltin<built-infunctionopenssl_md5>解决方法:这个上面写的是MD5错误,但不是这个样子,只是因为运行的配置......
  • Django版本要求的Python版本
    版本对应表Django版本Python版本2.23.5,3.6,3.7,3.8(addedin2.2.8),3.9(addedin2.2.17)3.13.6,3.7,3.8,3.9(addedin3.1.3)3.23.6,3.7......
  • 学习python第三天
    今日内容概要pycharm软件的基本使用python的注释语法变量与常量python的底层优化垃圾回收机制数据类型整型浮点型今日内容详细pycharm软件的基本使用下载......
  • django解决跨域请求
    安装django-cors-headerspython-mpipinstalldjango-cors-headers在#setting.py下添加如下代码INSTALLED_APPS=[...,"corsheaders",...,]MIDDL......