Django 網站框架 第一堂(下)

  • Post author:
  • 帖子最後修改:2021 年 11 月 27 日

Django模板語言詳解

變量

  1. 變量看起來就像是這樣: {{ variable }}

當模版引擎遇到一個變量,它將從上下文context中獲取這個變量的值,然後用值替換掉它本身。

變量的命名包括任何字母數字以及下劃線(“_”)的組合,最重要的是,

當模版系統渲染變量的時候遇到點(“.”),它將以這樣的順序查詢這個圓點具體代表的功能:

  • 字典查詢(Dictionary lookup)
  • 屬性或方法查詢(Attribute or method lookup)
  • 數字索引查詢(Numeric index lookup)

如果你使用的變量不存在,模版系統將插入string_if_invalid選項的值,默認設置為(空字符串)。

注意,像{{ foo.bar }}這模板表達的”bar”,如果在模板上下文中存在,即為一個字面意義的字符串不是使用變量bar的值。

過濾器

{{ name | lower }}  過濾器看起來是這樣的:使用管道符號( 該過濾器將文本轉換成小寫。

{{ text | escape | linebreaks }} 過濾器可以“鏈接”。一個過濾器的輸出應用於下一個過濾器。例如:

{{ bio|truncatewords:30 }}一些過濾器帶有參數。過濾器的參數看起來像是這樣:這將顯示bio變量的前30個詞。

過濾器參數包含空格的話,必須用引號包起來。例如,使用逗號和空格去連接一個列表中的元素,你需要使用{{ list|join:”, ” }}

1. default
為false或者空變量提供默認值,像這樣:

{{ value|default:”nothing” }}
2. length
返回值的長度。它對字符串和列表都起作用。

{{ value | length }}
如果value是[‘a’, ‘b’, ‘c’, ‘d’],那麼輸出4。

3. filesizeformat
格式化為“可讀”文件大小單位(即’13 KB’,4.1 MB’,’102 bytes’等)。

{{ value | filesizeformat }}
如果value是123456789,輸出將會是117.7MB。

我們可以創建自定義的模板過濾器和標籤,這是最終極的武器

標籤

標籤看起來像是這樣的:{% tag %}

標籤比變量複雜得多,有些用於在輸出中創建文本,有些用於控制循環或判斷邏輯,有些用於加載外部信息到模板中供以後的變量使用。

一些標籤需要開始和結束標籤(即{% 标签 %} … 标签 内容 … {% ENDTAG %}

Django自帶了大約24個內置的模版標籤。下面是一些常用的標籤:

 

1. for循環標籤
循環對像中每個元素。需要結束標籤 {% endfor %} 例如,顯示{% endfor %}athlete_list中提供的运动员列表

2. if,elif和else标签
计算一个表达式,并且当表达式的值是“True”时,显示块中的内容。需要{% endif %}结束标签。整体逻辑非常类似Python的if、elif和else,如下所示。:

{% if athlete_list %}
Number of athletes: {{ athlete_list|length }}
{% elif athlete_in_locker_room_list %}
Athletes should be out of the locker room soon!
{% else %}
No athletes.
{% endif %}

在上面的例子中,如果athlete_list不是空的,运动员的数量将显示为{{ athlete_list|length }}。否则,如果athlete_in_locker_room_list不为空,将显示“Athletes should be out…”。如果两个列表都是空的,将显示“No athletes.” 。

还可以在if标签中使用过滤器和多种运算符:

{% if athlete_list|length > 1 %}
Team: {% for athlete in athlete_list %} … {% endfor %}
{% else %}
Athlete: {{ athlete_list.0.name }}
{% endif %}
需要注意,大多数模版过滤器都返回字符串类型,所以使用过滤器做整数类型的比较通常是错误的,但length是一个例外。

註釋:

要注释模版中一行的部分内容,使用注释语法:{# #}。

例如,下面的模版将被渲染为’hello’:

{# greeting #}hello
注释可以包含任何模版内的代码,有效的或者无效的都可以。 像这样:

{# {% if foo %}bar{% else %} #}
以上是单行注释(在{# …. #}中,不允许有新行)。

如果需要注释掉模版中的多行内容,请使用comment标签。

顯示網頁內容

  • 在*.html 裡把參數設定好
  • views 方法寫入
  • urls把路徑設定好

多層路徑設定方法1在網頁裡面程式設定

原本網站內的path(,views.index,name=”Index”)

修改後為path(‘first’,views.index,name=”Index”)

多層路徑設定方法2在專案下urls(對外)設定

建立資料庫(sqlite3) 欄位都在models.pyg設定

例外,在預設情況下,Django會使用SQLite來儲存資料庫的內容,使用下序命令即產生sqlite3的檔案 :

資料庫與Django的關係

在預設的情況下,Django的資料JI是以Model的方式來操作,也就是在程式中権接
面對資料/!以及資料表,而是以class類別的方式先建立出Model •然後再透過對Model
的操作,達到操作資料庫的目的。這樣的好處是把程式和資料庫之間的關係以一層中介層
獅為連接的介面,日後如需要更換資料庫系統,就可以不需要更動到程式的內容。
也是因爲這樣,對於第一次接觸到此種方式的網站開發者而言會不太直覺,不去直接
定義資料庫中的資料表,而是以定義一個資料類別來當作是資料表•在定義了資料類別之
後,還要再執行一些指令讓這個資料表的每一個資料欄位之名稱、格式、屬性可以和資料
類別中的內容同步,的確是有些麻煩。但是•此種方式如果習慣了之後•你會發現,其實
這是把資料庫連接層加以抽象化的好方法•爲程式開發人員省去了花在各種不同資料庫操
作細節的精力和時間。

 因此簡單地看,在Django要使用資料庫,有以下的幾個步驟:

  1. 在models.py中定義所需要使用的類別(繼承自models.Model)
  2. 詳細地設定每一個在類別中的變數,亦即資料表中的每一個欄位
  3.  使用 python manage.py makemigrations appname 建立資料庫和 Django 間的中介檔案
  4.  使用python manage.py migrate同步更新資料庫的內容
  5. 在程式中使用Python的語法操作所定義的資料類別,等於是在操作資料庫中的資料表
				
					python manage.py makemigrations appname
python manage.py migrate