Django項目: 2.模板抽取

来源:https://www.cnblogs.com/Tmclri/archive/2019/09/14/11520507.html
-Advertisement-
Play Games

為什麼要抽模板,因為這樣能夠復用代碼,減少代碼量,需要原代碼時就不需要修改,也不需要添加; 如果不同,就只需要單獨修改不一樣的地方就行 : 多挖坑,少代碼,這就是抽模板的精髓,挖坑就是({% block xxx %}需要改變的代碼{% endblock %}) 靜態頁面抽取模板 一、分析靜態頁面 1 ...


為什麼要抽模板,因為這樣能夠復用代碼,減少代碼量,需要原代碼時就不需要修改,也不需要添加; 如果不同,就只需要單獨修改不一樣的地方就行  : 多挖坑,少代碼,這就是抽模板的精髓,挖坑就是({% block xxx %}需要改變的代碼{% endblock %})

靜態頁面抽取模板

一、分析靜態頁面

1.靜態vs動態

  

 

 

2.本次項目頁面分析

本項目由5個模塊組成分別是:newscoursedocuseradmin,按照django的風格,在前面創建的模板文件夾templates下,分別創建以app名命名的文件夾news,course,doc,user,admin,用於存放每個應用的模板文件。在前面創建的靜態文件夾statc下,也分別創建js,css,images,font等文件夾用來存放靜態文件。

 

3.分析模板頁面

觀察提供靜態模板頁面,找出模板的公共部分,然後抽取作為基礎模板。

 

 經過觀察,發現提供的模板佈局為,頂部導航,中間內容,右邊側欄,和底部頁腳。其中除了中間內容的佈局有所差異,其他三個部分的佈局都沒有改變,我們可以將這三個部分抽出來作為base模板。

 

二、模板抽取

首先提供的模板靜態文件先複製進static文件下相應的文件夾

1.base模板抽取

根據上面的分析提取頂部導航,底部頁腳,和側欄,在base目錄下創建base.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">
        <li class="active"><a href="base.html">首頁</a></li>
        <li><a href="../course/course.html">線上課堂</a></li>
        <li><a href="../doc/docDownload.html">下載文檔</a></li>
        <li><a href="search.html">搜索</a></li>
      </ul>
    </nav>
    <!-- nav end -->
    <!-- login start -->
      <div class="login-box">
          <div>
              <i class="PyWhich py-user"></i>
              <span>
                  <a href="../users/login.html" class="login">登錄</a> / <a href="../users/register.html"
                                                                          class="reg">註冊</a>
              </span>
          </div>
          <div class="author hide">
              <i class="PyWhich py-user"></i>
              <span>qwertyui</span>
              <ul class="author-menu">
                  <li><a href="javascript:void(0);">後臺管理</a></li>
                  <li><a href="javascript:void(0);">退出登錄</a></li>
              </ul>
          </div>
      </div>
    <!-- login end -->
  </div>
</header>
<!-- header end -->

<!-- main start 模板 -->
{% block main_start %}
<main id="main">
  <div class="w1200 clearfix">
    <!-- main-contain 模板  -->
      {% block main_contain %}

      {% endblock main_contain %}
    <!-- main-contain  end -->

    <!-- side start 模板 -->
        {% 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 %}
    <!-- 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>
<!-- 自定義js模板 -->
{% block script %}
{% endblock script %}
<!-- 自定義js模板 end -->
</body>
</html>

註意靜態文件的引用。

2.news模塊index頁面

news/index.html代碼:

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

{% block title %}首頁{% endblock title %}

{% block link %}
    <link rel="stylesheet" href="{% static 'css/news/index.css' %}">
{% endblock link %}

{% block main_contain %}
<div class="main-contain">
      <!-- banner start -->
        <div class="banner">
            <ul class="pic">
                <!--淡入淡出banner-->


                <li><a href="javascript:void(0);"><img src="{% static 'images/linux.jpg' %}" alt="test"></a></li>


                <li><a href="javascript:void(0);"><img src="{% static 'images/python_gui.jpg' %}" alt="test"></a></li>


                <li><a href="javascript:void(0);"><img src="{% static 'images/python_function.jpg' %}" alt="test"></a></li>


                <li><a href="javascript:void(0);"><img src="{% static 'images/python_advanced.jpg' %}" alt="test"></a></li>


                <li><a href="javascript:void(0);"><img src="{% static 'images/jichujiaochen.jpeg' %}" alt="test"></a></li>


                <li><a href="javascript:void(0);"><img src="{% static 'images/python_web.jpg' %}" alt="test"></a></li>


            </ul>
            <a href="javascript:void(0);" class="btn prev">
                <i class="PyWhich py-arrow-left"></i></a>
            <a href="javascript:void(0);" class="btn next">
                <i class="PyWhich py-arrow-right"></i></a>
            <ul class="tab">
                <!-- 按鈕數量必須和圖片一致 -->


                <li></li>


                <li></li>


                <li></li>


                <li></li>


                <li></li>


                <li></li>


            </ul>
        </div>
      <!-- banner end -->

      <!-- content start -->
      <div class="content">
        <!-- recommend-news start -->
          <ul class="recommend-news">
              <li>
                  <a href="https://www.shiguangkey.com/course/2432" target="_blank">
                      <div class="recommend-thumbnail">
                          <img src="{% static 'images/python_gui.jpg' %}" alt="title">
                      </div>
                      <p class="info">Python GUI 教程 25行代碼寫一個小鬧鐘</p>
                  </a>
              </li>

              <li>
                  <a href="https://www.shiguangkey.com/course/2432" target="_blank">
                      <div class="recommend-thumbnail">
                          <img src="{% static 'images/python_advanced.jpg' %}" alt="title">
                      </div>
                      <p class="info">python高性能編程方法一</p>
                  </a>
              </li>

              <li>
                  <a href="https://www.shiguangkey.com/course/2432" target="_blank">
                      <div class="recommend-thumbnail">
                          <img src="{% static 'images/jichujiaochen.jpeg' %}" alt="title">
                      </div>
                      <p class="info">python基礎 split 和 join函數比較</p>
                  </a>
              </li>
          </ul>
        <!-- recommend-news end -->

        <!--  news-nav start-->
          <nav class="news-nav">
              <ul class="clearfix">
                  <li class="active"><a href="javascript:void(0)">最新資訊</a></li>

                  <li><a href="javascript:void(0)" data-id="1">python框架</a>
                  </li>

                  <li><a href="javascript:void(0)" data-id="2">Python基礎</a>
                  </li>

                  <li><a href="javascript:void(0)" data-id="3">Python高級</a>
                  </li>

                  <li><a href="javascript:void(0)" data-id="4">Python函數</a>
                  </li>

                  <li><a href="javascript:void(0)" data-id="5">PythonGUI</a>
                  </li>

                  <li><a href="javascript:void(0)" data-id="6">Linux教程</a>
                  </li>

              </ul>
          </nav>
        <!--  news-nav end -->

        <!-- news-contain start -->
          <div class="news-contain">
              <ul class="news-list">

                  <li class="news-item">
                      <a href="https://www.shiguangkey.com/course/2432" class="news-thumbnail"
                         target="_blank">
                          <img src="{% static 'images/linux.jpg' %}" alt="linux查找文件或目錄命令"
                               title="linux查找文件或目錄命令">
                      </a>
                      <div class="news-content">
                          <h4 class="news-title"><a
                                  href="#">linux查找文件或目錄命令</a>
                          </h4>
                          <p class="news-details">linux查找文件或目錄命令,前提:知道文件或者目錄的具體名字,例如:sphinx.conffind 查找find / -name
                              dirname 查找目錄find -name...</p>
                          <div class="news-other">
                              <span class="news-type">Linux教程</span>
                              <span class="news-time">11/11 18:24</span>
                              <span class="news-author">python</span>
                          </div>
                      </div>
                  </li>

                  <li class="news-item">
                      <a href="https://www.shiguangkey.com/course/2432" class="news-thumbnail"
                         target="_blank">
                          <img src="{% static 'images/linux.jpg' %}" alt="linux下svn命令的使用"
                               title="linux下svn命令的使用">
                      </a>
                      <div class="news-content">
                          <h4 class="news-title"><a
                                  href="https://www.shiguangkey.com/course/2432/887">linux下svn命令的使用</a>
                          </h4>
                          <p class="news-details">1、將文件checkout到本地目錄svn checkout path(path是伺服器上的目錄) 例如:svn checkout
                              svn://192.168.1.1/pro/domain 簡寫:svn co2、往版本庫中添加新的文件 svn addfile 例如:svn add te...</p>
                          <div class="news-other">
                              <span class="news-type">Linux教程</span>
                              <span class="news-time">11/11 18:24</span>
                              <span class="news-author">python</span>
                          </div>
                      </div>
                  </li>

                  <li class="news-item">
                      <a href="https://www.shiguangkey.com/course/2432" class="news-thumbnail"
                         target="_blank">
                          <img src="{% static 'images/linux.jpg' %}" alt="實現linux和windows文件傳輸"
                               title="實現linux和windows文件傳輸">
                      </a>
                      <div class="news-content">
                          <h4 class="news-title"><a
                                  href="https://www.shiguangkey.com/course/2432/886">實現linux和windows文件傳輸</a>
                          </h4>
                          <p class="news-details">
                              其實這個題目有點大,這裡介紹的只是linux和windows文件傳輸中的一種,但是這種方法卻非常實用,那就是:ZModem協議具體是linux命令是:rz...</p>
                          <div class="news-other">
                              <span class="news-type">Linux教程</span>
                              <span class="news-time">11/11 18:24</span>
                              <span class="news-author">python</span>
                          </div>
                      </div>
                  </li>

                  <li class="news-item">
                      <a href="https://www.shiguangkey.com/course/2432" class="news-thumbnail"
                         target="_blank">
                          <img src="{% static 'images/linux.jpg' %}" alt=".htaccess配置詳解"
                               title=".htaccess配置詳解">
                      </a>
                      <div class="news-content">
                          <h4 class="news-title"><a
                                  href="https://www.shiguangkey.com/course/2432">.htaccess配置詳解</a>
                          </h4>
                          <p class="news-details">  .htaccess文件設置基礎教程 如果你設置好了比如常用的404頁面 301重定向 頁面還有500頁面等會設置了
                              無非對你的seo技術有很大幫助那麼 .htaccess文件到底怎麼設置呢  - .htaccess 文件(或者&quot;分散式...</p>
                          <div class="news-other">
                              <span class="news-type">Linux教程</span>
                              <span class="news-time">11/11 18:24</span>
                              <span class="news-author">python</span>
                          </div>
                      </div>
                  </li>

                  <li class="news-item">
                      <a href="https://www.shiguangkey.com/course/2432" class="news-thumbnail"
                         target="_blank">
                          <img src="{% static 'images/linux.jpg' %}" alt="使用nohup命令讓linux程式後臺運行"
                               title="使用nohup命令讓linux程式後臺運行">
                      </a>
                      <div class="news-content">
                          <h4 class="news-title"><a
                                  href="https://www.shiguangkey.com/course/2432">使用nohup命令讓linux程式後臺運行</a>
                          </h4>
                          <p class="news-details">使用nohup讓程式永遠後臺運行Unix/Linux下一般比如想讓某個程式在後臺運行,很多都是使用 &amp;
                              在程式結尾來讓程式自動運行。比如我們要運行mysql在後臺:/usr/local/mysql/bin/mysqld_safe --user=mysql &amp;但是...</p>
                          <div class="news-other">
                              <span class="news-type">Linux教程</span>
                              <span class="news-time">11/11 18:24</span>
                              <span class="news-author">python</span>
                          </div>
                      </div>
                  </li>

              </ul>
          </div>
        <!-- news-contain end -->

        <!-- btn-more start -->
        <a href="javascript:void(0);" class="btn-more">載入更多</a>
        <!-- btn-more end -->
      </div>
      <!-- content end -->
    </div>
{% endblock main_contain %}

{% block script %}
    <script src="{% static 'js/news/index.js' %}"></script>
{% endblock script %}

news/views.py代碼(視圖代碼)

from django.shortcuts import render


def index(request):
    return render(request, 'news/index.html')

news/urls.py代碼(路由配置)

from django.urls import path
from . import views
# url的命名空間
app_name = 'news'

urlpatterns = [
    path('', views.index, name='index'),    # 將這條路由命名為index
]

這會還得在主項目下配置分路由代碼(根urls.py代碼)

from django.urls import path, include

urlpatterns = [
  # 配置分路由用include path(
'', include('news.urls')) ]

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 同步、非同步、阻塞、非阻塞 [TOC] 1、同步 所謂同步,就是發出一個功能調用時,在沒有得到結果之前,該調用就不返回或繼續執行後續操作。 簡單來說,同步就是必須一件一件事做,等前一件做完了才能做下一件事。 例如:B/S模式中的表單提交,具體過程是:客戶端提交請求 等待伺服器處理 處理完畢返回,在這個 ...
  • 1.2 知識點 1.2.1 Struts2的Servlet的API的訪問 1.2.1.1 方式一 : 通過ActionContext實現 頁面: <h1>Servlet的API的訪問方式一:解耦合的方式</h1> <form action="${ pageContext.request.contex... ...
  • 前一章節,我們介紹了簡單工廠模式以及工廠方法模式,但是這兩種模式都存在一定的局限性,只能生產某一類型下的某一種產品,如果需求變更,同類型下出現了不同的產品,比如芝士披薩不僅有口味上的不同,同時存在外觀上的不同。這種時候,工廠模式顯然不再滿足要求,該怎麼辦呢?於是我們想到DIP原則,它不正是為瞭解決這 ...
  • Socket(套接字) 套接字是一個抽象層,應用程式可以通過它發送或接收數據,可對其進行像文件一樣的打開、讀寫和關閉等操作。套接字允許應用程式將I/O插入到網路中,並與網路中的其他應用程式進行通信。網路套接字是IP地址與埠的組合。 發展:套接字最初是由加利福尼亞大學Berkely分校為Unix系統 ...
  • 元組與列表區別 1. Python 元組與列表類似,不同之處在於列表可以修改,元組不可以修改 2. 元組用小括弧 定義,列表用方括弧 定義 3. 元組不可修改,列表可修改 元組創建 只需要在小括弧 內添加內容並用逗號 分隔開,如下示例 註意: 當元組只有一個元素時,需要在元素後面添加都要 如果不在後 ...
  • 程式演算法與人生選擇 我用演算法來類比如何做選擇,說白了就是怎麼去計算,但是並沒有講程式員可以發展的方向有哪些。 所以,就算是有這些所謂的方法論,我們可能對自己的發展還是會很糾結和無所事從,尤其是人到了30歲,這種彷徨和迷惑越來越重。雖然我之前也寫過一篇《編程年齡和編程技能》的文章,但是還是有很多做技術 ...
  • 1.為 Python 2 安裝 pip 首先,確保已經安裝了 Python 2。 在 Ubuntu 上,可以使用以下命令進行驗證 如果沒有錯誤並且顯示了 Python 版本的有效輸出,則說明安裝了 Python 2。 所以現在你可以使用這個命令為 Python 2 安裝 pip: 這將安裝 pip ...
  • busuanzi計數腳本 busuanzi官方指引 一、安裝腳本(必選) 要使用不蒜子必須在頁面中引入busuanzi.js,目前最新版如下。 不蒜子可以給任何類型的個人站點使用,如果你是用的hexo,打開themes/你的主題/layout/_partial/footer.ejs添加上述腳本即可, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...