django全棧(二):django模板-從史前文明到現代文明

django全棧(二):django模板-從史前文明到現代文明

      原諒我第二篇就直接跳躍到了模板這裏。。。因爲按照正常的循序漸進的方式,應該先講講概念、整體結構、組件關係之類的。而這篇直接就到了專題。是的,就是專題。因爲我覺得這個很重要,而且容易被忽視。而一旦被忽視,就會出現味道比較壞的代碼,不符合dry原則的代碼,這個是很不好的。所以,直接從這裏說起。


  • 背景

      django渲染模板是一個html文件,裏面可以加一些django的標記語言,然後django就可以自動往裏面添加內容,如數據庫某個表的某個域。

      既然前端用的是bootstrap,那麼,我肯定需要引入bootstrap庫啊,不論以本地文件的方式引用還是直接引用cdn的鏈接。都需要將資源對應的地址寫進html文件裏。這個地址一般有3-4個,分別js庫,css庫,jquery庫,還有各個庫是slim版本還是min版本等,整個設置也是挺長一個代碼塊的。如果我有10個html模板,那麼我需要重複引入10個bootstrap的引用代碼塊。純複製粘貼的話,這裏似乎會有一片陰雲。


  • 一個簡單的需求如何實現

      所有的html模板都可以以簡便的方式統一加載某些相同的html文件。

  • Brute Force方法

      直接複製粘貼。開始我也是這麼幹的。。。

  • html中的iframe

      用iframe來加載一個子網頁,但是很難看,佔槽位,而且很不正宗。。。

  • Javascript的ajax

      用一個ajax動態加載一個外部html文件的內容。。。代碼好長,好笨。。。。

  • jQuery的load方法

      本質還是ajax。爲什麼這麼說。:)jQuery就是封裝的一個js庫,二者的實現方式都只能通過服務器啓動方式才能預覽到網頁內容。。。也就是說直接從本地打開一個html到瀏覽器中是顯示不出來的。。。 

  • 讓人懷念的php中的include

      php就很好,可以直接從外部文件加載footer之類的網頁塊。非常的方便。


  • 現代文明
  • django的include

    {% include 'section.html' %}

      直接一行代碼就搞定了外部html文件的加載。所以,如果自定義了前端bootstrap的版本和引用鏈接塊,全都放到一個html文件中,別的模板直接include這個文件就直接把其內容全部加載過來了。當然,如果直接使用django-bootstrap庫的話,用load就可以加載相應的庫。

{# Load the tag library #}
{% load bootstrap3 %}

{# Load CSS and JavaScript #}
{% bootstrap_css %}
{% bootstrap_javascript %}


  • 面向對象的模板--模板繼承
{% extends "base.html" %}
{% block title %}Articles for {{ year }}{% endblock %}
{% block content %}
<h1>Articles for {{ year }}</h1>
{% for article in article_list %}
<p>{{ article.headline }}</p>
<p>By {{ article.reporter.full_name }}</p>
<p>Published {{ article.pub_date|date:"F j, Y" }}</p>
{% endfor %}
{% endblock %}
      如果你有一個大的架子,各個網頁都用這個架子,只是小部分內容有差異,那就直接定義一個base.html。在裏面定義好通用的部分,至於差異性的東西,用{% block name %}來預留槽位。在子模板中,需要重寫某個塊的內容,用{% block name} {% endblock %}包圍你想要自定義的內容即可。


      所以,這樣下來就很方便,很dry,很先進了。。。就點到這裏了。。。。:)

      Do not repeat yourself !



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章