十六.静态页面抽取模板 2021-03-31

十六.静态页面抽取模板

引言

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

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

一.分析静态页面

1.静态vs动态

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

urlpatterns = [
    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,include

urlpatterns = [
    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、Alex
                        Martelli等Python大咖担纲技术审稿人,从语言设计层面剖析编程细节,兼顾Python 3和Python
                        2,告诉你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,include

urlpatterns = [
    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,include

urlpatterns = [
    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.运行结果

其他模板的引用以后调用
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值