十六.静态页面抽取模板

引言

模板标签之模板继承
静态模板文件:链接:https://pan.baidu.com/s/1eZKi4a5fBTmy-DwAQmr51w
提取码:8mmy
django--------block / extends / include 用法

为什么要抽模板,因为这样能够复用代码,减少代码量,需要原代码时就不需要修改,也不需要添加; 如果不同,就只需要单独修改不一样的地方就行 : 多挖坑,少代码,这就是抽模板的精髓,挖坑就是({% block xxx %}需要改变的代码{% endblock %}

一.分析静态页面

1.静态vs动态

条目 静态页面 动态页面
网站内容 固定不变 随访问时间,对象等不断变化
访问速度 更快,不需要脚本计算及读取后台数据库 更慢
改变内容 不方便,需要修改页面文件然后上传 简单,更新数据库即可
安全性 因为没有后台交互安全性更高 有安全隐患,容易被攻击
兼容性 夸平台,夸服务器 依赖网站开发语言环境
开发语言 html python,java,php

2.本次项目页面分析

本项目由5个模块组成分别是:news、course、doc、user、admin,按照django的风格,在前面创建的模板文件夹templates下,分别创建以app名命名的文件夹news,course,doc,user,admin,用于存放每个应用的模板文件。在前面创建的静态文件夹statc下,也分别创建js,css,images,font等文件夹用来存放静态文件。

3.分析模板页面

user/login.html

news/index.html

doc/docDownload.html

course/course.html

news/search.html

抽取模板要先对应用内的网页进行分析,找出网页之间的共性。

对着5个页面分析不难发现:

每个页面的头部和尾部都是一样的。

注册页面(register.html)、课程页面(course.html)中间是由一个部分构成。

首页(index.html)、下载页面(download.html)、搜索页(search.html)中间由左右两个部分构成,下载页面(download.html)和搜索页(search.html)的右边部分都一样,而首页(index.html)的右边部分只比下载搜索页面多了一个人们推荐。
    

分析完后,我们可以来考虑怎么提取模板:

将最普遍的头部和尾部作为一个模板、中间部门由django的模板语法block代替,命名为base.html,这样注册页面、课程页面就可以在继承base.html后,将中间一部分填进去。

继承base.html,将中间一部分分为两部分,左边使用一个block代替,右边将在线课程和关注我源码填进去,再加一个block用于代替热门推荐,命名为base2.html,这样首页只需将左边一部分和热门推荐填进去,下载页面和搜索页面只用填左边一部分。

默认没有填的block,为空白。

遵循少数服从多数的原则,如果大多数都有这个共性,那就将共性作为模板,其他使用block代替,如果只有一两个,就不必使用模板了。

二.模板抽取

1.准备工作

将准备好的静态模板放到项目文件的static与templates文件夹中

2.抽取基本框架

何为基本框架? 通过上面的对比可知,在所有的页面中公用的部分即为集合框架

为何要抽取基本框架? 因为我们使用的是已经写好的静态模板,当我们把他们与后端相结合时,很多的文件路径不对,或者是很多前端的语法不在满足我们后端语法的需求,我们需要对一部分代码进行从新构造。在构造的过程中,为了简化构造过程,不在重复写反复利用的代码,我们该类代码抽离出来,进行统一的调用,增加代码的利用率。

在该项目中,重复利用的为index.html首页中的 1. 顶部导航 2.右边侧栏 3. 底边页脚
实现过程:
1.在templates文件夹下建立base文件夹
2.将index.html文件复制到该文件夹下,重命名为base.html文件

3.对文件进行抽取

  • 在base.html中导入static静态文件夹
  • 将文件中的文件路径,改为后端动态路径
  • 将文件中的a标签路径接口改为自己的接口

例:

注:
这句代码在index.html文件中存在,所以不进行抽取,并且在部分不是共有部分,我们会在index.html文件中进行改写

<link rel="stylesheet" href="../css/news/index.css"


最后的得到的dase.html文件

{% load static %}
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><!-- title 模板 --><title>{% block title %}{% endblock title %}</title><!-- title 模板 end --><link rel="stylesheet" href="{% static 'css/base/reset.css' %}"><link rel="stylesheet" href="{% static 'css/base/common.css' %}"><link rel="stylesheet" href="{% static 'css/base/side.css' %}"><link rel="stylesheet" href="http://at.alicdn.com/t/font_684044_un7umbuwwfp.css"><!-- 页面css 模板 -->{% block link %}{% endblock link %}<!-- 页面css 模板 end -->
</head>
<body>
<!-- header start -->
<header id="header"><div class="mw1200 header-contain clearfix"><!-- logo start --><h1 class="logo"><a href="javascript:void(0);" class="logo-title">Python</a></h1><!-- logo end --><!-- nav start --><nav class="nav"><ul class="menu">{% block menus %}<li class="active"><a href="{% url 'news:index' %}">首页</a></li><li><a href="{% url 'course:index' %}">在线课堂</a></li><li><a href="{% url 'doc:index' %}">下载文档</a></li><li><a href="#">搜索</a></li>{% endblock menus %}</ul></nav><!-- nav end --><!-- login start --><div class="login-box">{% if user.is_authenticated %}<div class="author"><i class="PyWhich py-user"></i><span>{{ user.username }}</span><ul class="author-menu">{% if user.is_staff %}<li><a href="{% url 'myadmin:index' %}">后台管理</a></li>{% endif %}<li><a href="{% url 'user:logout' %}">退出登录</a></li></ul></div>{% else %}<div><i class="PyWhich py-user"></i><span><a href="{% url 'user:login' %}" class="login">登录</a> / <a href="{% url 'user:register' %}"class="reg">注册</a></span></div>{% endif %}</div><!-- login end --></div>
</header>
<!-- header end --><!-- main start 模板 -->
{% block main_start %}
<main id="main"><div class="w1200 clearfix">{% block side %}<aside class="side"><div class="side-activities"><h3 class="activities-title">在线课堂<a href="javascript:void(0)">更多</a></h3><div class="activities-img"><a href="javascript:void(0);" target="_blank"><img src="{% static 'images/english.jpg' %}" alt="title"></a><p class="activities-tips">对话国外小姐姐</p></div><ul class="activities-list"><li><a href="javascript:void(0);" target="_blank"><span class="active-status active-start">报名中</span><span class="active-title"><ahref="https://www.shiguangkey.com/course/2432"> Django 项目班</a></span></a></li><li><a href="javascript:void(0);" target="_blank"><span class="active-status active-end">已结束</span><span class="active-title"><ahref="https://www.shiguangkey.com/course/2321">Python入门基础班</a></span></a></li></ul></div><div class="side-attention clearfix"><h3 class="attention-title">关注我</h3><ul class="side-attention-address"><li><a href="javascript:void(0);" target="_blank"><i class="PyWhich py-GitHub"></i>XinLan</a></li><li><a href="javascript:void(0);" target="_blank"><i class="PyWhich py-zhihu"style="color:rgb(0, 108, 226);"></i>XinLan</a></li><li><a href="javascript:void(0);" target="_blank"><i class="PyWhich py-weibo"style="color:rgb(245,92,110);"></i>XinLan</a></li></ul><div class="side-attention-qr"><p>扫码关注</p></div></div><!-- 热门推荐 模板  -->{% block hot_recommend %}<div class="side-hot-recommend"><h3 class="hot-recommend">热门推荐</h3><ul class="hot-news-list"><li><a href="javascript:void(0)" class="hot-news-contain clearfix"><div class="hot-news-thumbnail"><img src="{% static 'images/python_web.jpg' %}"alt=""></div><div class="hot-news-content"><p class="hot-news-title">Django调试工具django-debug-toolbar安装使用教程</p><div class="hot-news-other clearfix"><span class="news-type">python框架</span><!-- 自带的 --><time class="news-pub-time">11月11日</time><span class="news-author">python</span></div></div></a></li></ul></div>{% endblock hot_recommend %}<!-- 热门推荐 模板 end --></aside>{% endblock side %}<!-- main-contain 模板  -->{% block main_contain %}{% endblock %}<!-- main-contain  end --><!-- side start 模板 --><!-- side end --></div>
</main>
{% endblock main_start %}
<!-- main 内容模板 end --><!-- footer start -->
<footer id="footer"><div class="footer-box"><div class="footer-content"><p class="top-content"><span class="link"><a href="javascript:void(0)">关于Python</a> |<a href="javascript:void(0)">我就是我</a> |<a href="javascript:void(0)">人生苦短</a> |<a href="javascript:void(0)">我用Python</a></span><span class="about-me">关于我: <i class="PyWhich py-wechat"></i> XinLan</span></p><p class="bottom-content"><span>地址: xxxx</span><span>联系方式: <a href="tel:400-1567-315">400-1567-315</a> (24小时在线)</span></p></div><p class="copyright-desc">Copyright &copy; 2008 - 2018 xxx有限公司. All Rights Reserved</p></div>
</footer>
<!-- footer end -->
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script src="{% static 'js/base/common.js' %}"></script>
<script src="{% static 'js/base/message.js' %}"></script>
<!-- 自定义js模板 -->
{% block script %}
{% endblock script %}
<!-- 自定义js模板 end -->
</body>
</html>

3.news/index模板的继承与引用

3.1 继承模板

1.在文件中导入要继承的模板

{% extends 'base/base.html' %}

2.加载静态文件

{% load static %}

3.继承父类模板 base.html

4.删除在该模板中与父类模板重复的部分

5.得到的继承后的index.html模板

{% load static %}
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><!-- title 模板 --><title>{% block title %}{% endblock title %}</title><!-- title 模板 end --><link rel="stylesheet" href="{% static 'css/base/reset.css' %}"><link rel="stylesheet" href="{% static 'css/base/common.css' %}"><link rel="stylesheet" href="{% static 'css/base/side.css' %}"><link rel="stylesheet" href="http://at.alicdn.com/t/font_684044_un7umbuwwfp.css"><!-- 页面css 模板 -->{% block link %}{% endblock link %}<!-- 页面css 模板 end -->
</head>
<body>
<!-- header start -->
<header id="header"><div class="mw1200 header-contain clearfix"><!-- logo start --><h1 class="logo"><a href="javascript:void(0);" class="logo-title">Python</a></h1><!-- logo end --><!-- nav start --><nav class="nav"><ul class="menu">{% block menus %}<li class="active"><a href="{% url 'news:index' %}">首页</a></li><li><a href="{% url 'course:index' %}">在线课堂</a></li><li><a href="{% url 'doc:index' %}">下载文档</a></li><li><a href="#">搜索</a></li>{% endblock menus %}</ul></nav><!-- nav end --><!-- login start --><div class="login-box">{% if user.is_authenticated %}<div class="author"><i class="PyWhich py-user"></i><span>{{ user.username }}</span><ul class="author-menu">{% if user.is_staff %}<li><a href="{% url 'myadmin:index' %}">后台管理</a></li>{% endif %}<li><a href="{% url 'user:logout' %}">退出登录</a></li></ul></div>{% else %}<div><i class="PyWhich py-user"></i><span><a href="{% url 'user:login' %}" class="login">登录</a> / <a href="{% url 'user:register' %}"class="reg">注册</a></span></div>{% endif %}</div><!-- login end --></div>
</header>
<!-- header end --><!-- main start 模板 -->
{% block main_start %}
<main id="main"><div class="w1200 clearfix">{% block side %}<aside class="side"><div class="side-activities"><h3 class="activities-title">在线课堂<a href="javascript:void(0)">更多</a></h3><div class="activities-img"><a href="javascript:void(0);" target="_blank"><img src="{% static 'images/english.jpg' %}" alt="title"></a><p class="activities-tips">对话国外小姐姐</p></div><ul class="activities-list"><li><a href="javascript:void(0);" target="_blank"><span class="active-status active-start">报名中</span><span class="active-title"><ahref="https://www.shiguangkey.com/course/2432"> Django 项目班</a></span></a></li><li><a href="javascript:void(0);" target="_blank"><span class="active-status active-end">已结束</span><span class="active-title"><ahref="https://www.shiguangkey.com/course/2321">Python入门基础班</a></span></a></li></ul></div><div class="side-attention clearfix"><h3 class="attention-title">关注我</h3><ul class="side-attention-address"><li><a href="javascript:void(0);" target="_blank"><i class="PyWhich py-GitHub"></i>XinLan</a></li><li><a href="javascript:void(0);" target="_blank"><i class="PyWhich py-zhihu"style="color:rgb(0, 108, 226);"></i>XinLan</a></li><li><a href="javascript:void(0);" target="_blank"><i class="PyWhich py-weibo"style="color:rgb(245,92,110);"></i>XinLan</a></li></ul><div class="side-attention-qr"><p>扫码关注</p></div></div><!-- 热门推荐 模板  -->{% block hot_recommend %}<div class="side-hot-recommend"><h3 class="hot-recommend">热门推荐</h3><ul class="hot-news-list"><li><a href="javascript:void(0)" class="hot-news-contain clearfix"><div class="hot-news-thumbnail"><img src="{% static 'images/python_web.jpg' %}"alt=""></div><div class="hot-news-content"><p class="hot-news-title">Django调试工具django-debug-toolbar安装使用教程</p><div class="hot-news-other clearfix"><span class="news-type">python框架</span><!-- 自带的 --><time class="news-pub-time">11月11日</time><span class="news-author">python</span></div></div></a></li></ul></div>{% endblock hot_recommend %}<!-- 热门推荐 模板 end --></aside>{% endblock side %}<!-- main-contain 模板  -->{% block main_contain %}{% endblock %}<!-- main-contain  end --><!-- side start 模板 --><!-- side end --></div>
</main>
{% endblock main_start %}
<!-- main 内容模板 end --><!-- footer start -->
<footer id="footer"><div class="footer-box"><div class="footer-content"><p class="top-content"><span class="link"><a href="javascript:void(0)">关于Python</a> |<a href="javascript:void(0)">我就是我</a> |<a href="javascript:void(0)">人生苦短</a> |<a href="javascript:void(0)">我用Python</a></span><span class="about-me">关于我: <i class="PyWhich py-wechat"></i> XinLan</span></p><p class="bottom-content"><span>地址: xxxx</span><span>联系方式: <a href="tel:400-1567-315">400-1567-315</a> (24小时在线)</span></p></div><p class="copyright-desc">Copyright &copy; 2008 - 2018 xxx有限公司. All Rights Reserved</p></div>
</footer>
<!-- footer end -->
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script src="{% static 'js/base/common.js' %}"></script>
<script src="{% static 'js/base/message.js' %}"></script>
<!-- 自定义js模板 -->
{% block script %}
{% endblock script %}
<!-- 自定义js模板 end -->
</body>
</html>

3.2模板的引用

1.在news的app应用文件夹下views.py文件,配置显示函数

2.在news的app应用文件夹下建立urls.py文件,配置路由

from django.urls import path
from . import views
# url的命名空间
app_name = 'news'urlpatterns = [path('', views.index, name='index'),    # 将这条路由命名为index
]

命名空间可以在一个子应用有多个url时,需要引用其中一个url,做字典方式应用

{%url '命名空间:urlname'%}

3.来到项目目录下的urls文件,配置app的路由

from django.contrib import admin
from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),#设置app的路由path('',include('news.urls'))
]

4.运行结果

4.course模板的继承和引用

4.1继承模板

1.在文件中导入要继承的模板

{% extends 'base/base.html' %}

2.加载静态文件

{% load static %}

3.继承父类模板 base.html

4.删除在该模板中与父类模板重复的部分

5.得到的继承后的course.html模板

course.html{% extends 'base/base.html' %}
{% load static %}
{% block title %}在线课堂{% endblock %}
{% block link %}<link rel="stylesheet" href="{% static '/css/course/course.css' %}">
{% endblock %}
{% block menus %}<li ><a href="{% url 'news:index' %}">首页</a></li><li class="active"><a href="{% url 'course:index' %}">在线课堂</a></li><li><a href="{% url 'doc:index' %}">下载文档</a></li><li><a href="search.html">搜索</a></li>
{% endblock menus %}
{% block main_start %}<main id="course-container"><div class="w1200"><ul class="course-list"><li class="course-item"><a href="https://www.shiguangkey.com/course/2432"><img class="course-img" src="{% static 'images/python_advanced.jpg' %}"alt="潭州英语"><div class="course-content"><p class="course-info">python 全栈开发</p><p class="course-author">不动(python金牌讲师)</p><p class="course-price free">免费</p></div></a></li><li class="course-item"><a href="https://www.shiguangkey.com/course/2432"><img class="course-img" src="{% static 'images/python_web.jpg' %}"alt="潭州英语"><div class="course-content"><p class="course-info">django 项目</p><p class="course-author">XinLan(python讲师)</p><p class="course-price free">免费</p></div></a></li></ul></div></main>
{% endblock %}

4.2模板的引用

1.在course的app应用文件夹下views.py文件,配置显示函数(建立视图类)

from django.shortcuts import render
from django.views import View
# Create your views here.class IndexViews(View):def get(self,request):return render(request,'course/course.html')

2.在course的app应用文件夹下建立urls.py文件,配置路由

from django.urls import path
from . import views
#命名空间
app_name = 'course'urlpatterns = [path('', views.IndexViews.as_view(), name='index'),    # 将这条路由命名为index]

命名空间可以在一个子应用有多个url时,需要引用其中一个url,做字典方式应用

{%url '命名空间:urlname'%}

3.来到项目目录下的urls文件,配置app的路由

为什么添加course/ 路径,因为我们实现进入首页,然后通过该路径进入子引用

from django.contrib import admin
from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),#设置app的路由path('',include('news.urls')),#为什么添加course/ 路径,因为我们实现进入首页,然后通过该路径进入子引用path('course/',include('course.urls'))
]

5.doc/docDownload模板的继承和引用

5.1继承模板

1.在文件中导入要继承的模板

{% extends 'base/base.html' %}

2.加载静态文件

{% load static %}

3.继承父类模板 base.html

4.删除在该模板中与父类模板重复的部分

5.得到的继承后的docDownload.html模板

{% extends 'base/base.html' %}
{% block title %}
{% load static %}
文档下载
{% endblock title %}
{% block link %}
<link href="{% static 'css/doc/docDownload.css' %}" rel="stylesheet">
{% endblock link %}<!-- header start -->
<header id="header"><div class="mw1200 header-contain clearfix"><!-- logo start --><h1 class="logo"><a href="javascript:void(0);" class="logo-title">Python</a></h1><!-- logo end --><!-- nav start --><nav class="nav"><ul class="menu">{% block menus %}<li><a href="{% url 'news:index' %}">首页</a></li><li class="active"><a href="{% url 'course:index' %}">在线课堂</a></li><li><a href="{% url 'doc:index' %}">下载文档</a></li><li><a href="search.html">搜索</a></li>{% endblock menus %}</ul></nav><!-- nav end --><!-- login start --><!-- login end --></div>
</header>
<!-- header end --><!-- main start -->{% block main_contain %}
<div class="main-contain "><div class="banner"><img src="https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1802845035,3786939119&fm=26&gp=0.jpg"alt=""></div><div class="pay-doc-contain"><ul class="pay-list"><li class="pay-item"><div class="pay-img doc"></div><div class="d-contain"><p class="doc-title">python cookbook 3.0 教程</p><p class="doc-desc">强烈推荐的python 教程。</p><!-- /www/?xxx --><a href="#" class="pay-price">下载</a></div></li><li class="pay-item"><div class="pay-img doc"></div><div class="pay-contain"><p class="pay-title">流畅的Python</p><p class="pay-desc">【本书特色】本书由奋战在Python开发一线近20年的Luciano Ramalho执笔,Victor Stinner、AlexMartelli等Python大咖担纲技术审稿人,从语言设计层面剖析编程细节,兼顾Python 3和Python2,告诉你Python中不亲自动手实践就无法理解的语言陷阱成因和解决之道,教你写出风格地道的Python代码。</p><!-- /www/?xxx --><a href="#" class="pay-price">下载</a></div></li><li class="pay-item"><div class="pay-img doc"></div><div class="pay-contain"><p class="pay-title">深入Flask</p><p class="pay-desc">深入Flask,强烈推荐!</p><!-- /www/?xxx --><a href="#" class="pay-price">下载</a></div></li></ul></div>
</div>
{% endblock main_contain %}
<!-- main-contain  end -->
<!-- side start --><!-- side end --><!-- footer end -->
{% block script %}
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
{% endblock script %}

5.2模板的引用

1.在doc的app应用文件夹下views.py文件,配置显示函数

from django.shortcuts import render# Create your views here.
def index(request):return render(request,'doc/docDownload.html')

2.在course的app应用文件夹下建立urls.py文件,配置路由

from django.urls import path
from . import views
# url的命名空间
app_name = 'doc'urlpatterns = [path('', views.index, name='index'),    # 将这条路由命名为index
]

命名空间可以在一个子应用有多个url时,需要引用其中一个url,做字典方式应用

{%url '命名空间:urlname'%}

3.来到项目目录下的urls文件,配置app的路由

为什么添加doc/ 路径,因为我们实现进入首页,然后通过该路径进入子引用

from django.contrib import admin
from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),#设置app的路由path('',include('news.urls')),#为什么添加course/ 路径,因为我们实现进入首页,然后通过该路径进入子引用path('course/',include('course.urls')),##为什么添加doc/ 路径,因为我们实现进入首页,然后通过该路径进入子引用path('doc/',include('doc.urls'))
]

6.user/login模板的继承和引用

6.1继承模板

1.在文件中导入要继承的模板

{% extends 'base/base.html' %}

2.加载静态文件

{% load static %}

3.继承父类模板 base.html

4.删除在该模板中与父类模板重复的部分

5.得到的继承后的login.html模板

{% extends 'base/base.html' %}
{% load static %}
{% block  title %}
登录
{% endblock title %}{% block link %}<link rel="stylesheet" href="{% static 'css/authPro/auth.css' %}">
{% endblock link %}<!-- header start --><!-- header end -->
{% block main_start %}
<!-- container start -->
<main id="container"><div class="login-contain"><div class="top-contain"><h4 class="please-login">请登录</h4><a href="javascript:void(0);" class="register">立即注册 &gt;</a></div><form action="" method="post" class="form-contain"><div class="form-item"><input type="tel" placeholder="请输入手机号" name="telephone" class="form-control" autocomplete="off"></div><div class="form-item"><input type="password" placeholder="请输入密码" name="password" class="form-control"></div><div class="form-item clearfix"><label><input type="checkbox" name="remember"><span>记住我</span></label><a href="javascript:void(0);" class="forget-password">忘记密码?</a></div><div class="form-login"><input type="submit" value="登录" class="login-btn"></div></form></div>
</main>
<!-- container end -->
{% endblock main_start %}

6.得到的继承后的register·.html模板

{% extends 'base/base.html' %}
{% load static %}
{% block title %}注册{% endblock title %}{% block link %}
<link rel="stylesheet" href="{% static 'css/authPro/auth.css' %}">
{% endblock link %}{% block main_start %}<main id="container"><div class="register-contain"><div class="top-contain"><h4 class="please-register">请注册</h4><a href="javascript:void(0);" class="login">立即登录 &gt;</a></div><form action="" method="post" class="form-contain"><div class="form-item"><input type="text" placeholder="请输入用户名" name="username" class="form-control" autocomplete="off"></div><div class="form-item"><input type="password" placeholder="请输入密码" name="password" class="form-control"></div><div class="form-item"><input type="password" placeholder="请输入确认密码" name="password_repeat" class="form-control"></div><div class="form-item"><input type="tel" placeholder="请输入手机号" name="telephone" class="form-control" autocomplete="off" autofocus></div><div class="form-item"><input type="text" placeholder="请输入图形验证码" name="captcha_graph" class="form-captcha"><a href="javascript:void(0);" class="captcha-graph-img"><img src="#" alt="验证码" title="点击刷新"></a></div><div class="form-item"><input type="text" placeholder="请输入短信验证码" name="sms_captcha" class="form-captcha" autocomplete="off"><a href="javascript:void(0);" class="sms-captcha" title="发送验证码">获取短信验证码</a></div><div class="form-item"><input type="submit" value="立即注册" class="register-btn"></div></form></div>
</main>
{% endblock main_start %}
{% block script %}<script src="{% static 'js/user/auth.js' %}"></script>
{% endblock script %}

6.2模板的引用

1.在user的app应用文件夹下views.py文件,配置显示函数(建立视图类)

from django.shortcuts import render# Create your views here.
def login(request):#登录模块return render(request, 'user/login.html')def register(request):#注册模块return render(request,'user/register.html')

2.在user的app应用文件夹下建立urls.py文件,配置路由

from django.urls import path
from . import views
# url的命名空间
app_name = 'user'urlpatterns = [path('login/', views.login, name='login'),path('register/', views.register, name='register'),]

命名空间可以在一个子应用有多个url时,需要引用其中一个url,做字典方式应用

{%url '命名空间:urlname'%}

3.来到项目目录下的urls文件,配置app的路由

同上面比较同样是子应用,为什么不设置路径,因为在user中不只是一个接口

from django.contrib import admin
from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),#设置app的路由path('',include('news.urls')),#为什么添加course/ 路径,因为我们实现进入首页,然后通过该路径进入子引用path('course/',include('course.urls')),#为什么添加doc/ 路径,因为我们实现进入首页,然后通过该路径进入子引用path('doc/',include('doc.urls')),#同上面比较同样是子应用,为什么不设置路径,因为在user中不只是一个接口path('',include('user.urls'))
]

7.运行结果

其他模板的引用以后调用

十六.静态页面抽取模板 2021-03-31相关推荐

  1. 网站前台静态页面html模板

    原文:网站前台静态页面html模板 源代码下载地址:http://www.zuidaima.com/share/1550463635442688.htm 分享

  2. 【C语言进阶深度学习记录】十六 静态库与动态库的创建与使用

    上一篇文章学习了编译的过程,点击链接查看:[C语言进阶深度学习记录]十五 编译过程简介,每一个C源文件编译后将会生成目标文件,那么这些目标文件,还需要链接起来,生成可执行文件. 文章目录 1 链接的意 ...

  3. 7月14日第壹简报,星期四,农历六月十六

    7月14日第壹简报,星期四,农历六月十六 1. 天链二号03星成功发射,中国第二代数据中继卫星系统正式建成. 2. 微博.微信:将整治用谐音字.变体字等"错别字"发布.传播传播不良 ...

  4. fastadmin html模板,使用fastadmin的页面异常模板

    1.效果图 2.修改tp异常页面的模板文件( /thinkphp/tpl/think_exception.tpl ),将文件中的内容全部替换成下面的内容然后保存即可(若发生报错,请注意语言包问题) $ ...

  5. php简单的静态页面现成,PHP生成静态页面的简单方法

    页面静态化的方法,分为两种,一种是伪静态,就是url 重写,一种是你真的静态化.下面介绍PHP中页面静态化的方法. 什么是PHP静态化 PHP静态化的简单理解就是使网站生成页面以静态HTML的形式展现 ...

  6. E.03.31 Shadowed by Pandemic, Olympic Torch Relay Begins in Japan

    2021.03.31 文章目录 [课程导读] [英文原文] [外刊原文] [课程导读] 上周,东京奥运会火炬传递仪式在福岛县正式开启.日本政府将这届因新冠疫情推迟了一年的奥运会视为重建和复兴的标志,认 ...

  7. Web Hacking 101 中文版 十六、模板注入

    十六.模板注入 作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 模板引擎是允许开发者或设计师在创建动态网页的时候,从数据展示中分离编程逻辑的工具.换句话说,除了拥 ...

  8. 【十四、网站备案、博客备案、工信部备案】2021最详细wordpress博客建站教程(2021.03.04更新)

    通过本wordpress博客建站教程系列系列文章,你可以不懂网页代码条件下,搭建一个谷歌insight测评90分的个人博客,最低费用在每年80块.本人搭建博客小站点击下面链接即可进入:         ...

  9. 【十五、网站公安备案】2021最详细wordpress博客建站教程(2021.03.04更新)

    通过本wordpress博客建站教程系列系列文章,你可以不懂网页代码条件下,搭建一个谷歌insight测评90分的个人博客,最低费用在每年80块.本人搭建博客小站点击下面链接即可进入:         ...

最新文章

  1. pandas UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb1 in position 0: invalid start byte
  2. C# Winform 通过FlowLayoutPanel及自定义的编辑控件,实现快速构建C/S版的编辑表单页面...
  3. 学习笔记---母板页、用户控件、第三方控件及视图状态管理
  4. php使用redis命令,PHP 使用 Redis
  5. 温故知新-[CPP]-Eclipse-CPP中一个Project多个Main
  6. 你试过这样写C程序吗
  7. 中国第二代身份证验证js代码
  8. 硬件知识:电脑硬盘的数据保护与恢复,新手必备的知识!
  9. mysql数据超10亿条,大型主键:超过10亿行MySQL + InnoDB?
  10. 对于原始轨迹的噪声过滤方法和曲率计算方法
  11. 如何让Sublime Text2支持GBK编码
  12. css 一些好玩的属性,推荐一些比较有用的css3新属性
  13. 北京市强化电信用户信息安全保护
  14. Linux5常规网络配置,求解red hat linux enterprise 5 网络配置问题
  15. WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 问题
  16. SAM2195和SAM2695 和SAM5704硬音源设备在三四十年前MIDI技术刚刚起步之时
  17. 1000以内的素数(质数)
  18. Chrome浏览器隐藏彩蛋
  19. 中国标准时间转换成DateTime
  20. 初级会计实务--第二章第五节、固定资产

热门文章

  1. 数据结构--双向循环链表的实现
  2. ThreeJs ObjLoader 编码问题
  3. arcgispro 影像分类
  4. 豆浆机单片机控制c语言,用单片机设计的豆浆机控制电路原理图 _ 工控PLC博客_工控人家园_电工论坛_电工学习网_防爆电气_......
  5. 网站简约卡通风格404页面html源码下载
  6. 计算机系统基础(一)
  7. WiFi 6E与WiFi7技术特点
  8. python爬取B站up主全部视频封面
  9. TMS320F28335程序烧写FLASH
  10. 华为nova2s云相册在哪里_华为nova2s隐藏相册在哪 | 手游网游页游攻略大全