- Django 3.0入門與實踐
- 李健編著
- 807字
- 2021-03-27 00:17:37
3.11 使用模板系統
前面的detail.html模板過于簡單,現實中Django的模板系統非常強大,可以制作豐富多彩的網頁效果。將以下代碼復制到模板文件detail.html中:

上面代碼中的雙大括號形式({{ }})是Django模板語言中的屬性訪問語法,采用英文句點的方式訪問變量的屬性,如示例中的代碼{{ question.question_text }},其中question是視圖通過字典形式傳遞給模板的變量,通過“.”訪問question的屬性。
模板中{% %}形式的代碼是Django模板語言的函數語法,上例中{% for choice in question.choice_set.all %}是一個for循環,循環對象是question.choice_set.all,該對象等價于Python語法中的question.choice_set.all(),返回一個可迭代的數組。Django模板函數需要有結束標記,本例中{% for %}循環的結束標記是{% endfor %}。
3.11.1 模板中的超鏈接
在前面polls/index.html模板中,使用硬編碼的形式編寫HTML超鏈接:
<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
當項目中存在很多模板并且多個模板都使用同一個URL的時候,如果需要修改URL,那么這種書寫方式會給開發人員帶來很大的工作量。此時可以通過對URL命名的方式解決這類問題,之前介紹URL時講到了URL的命名,本例中的URL如下:
path('<int:question_id>/', views.detail, name='detail'),
使用URL重新修改模板如下:
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
其中,{% url %}是Django的模板標簽,用于定義URL。該標簽將會在polls/urls模塊中查找名為“detail”的URL,question.id作為參數傳遞給URL,如果需要傳遞多個參數時,只要在question.id后面緊跟一個空格然后繼續添加參數即可。
通過{% url %}模板標簽可以快速修改模板中的URL,極大地提高工作效率,以保證代碼安全。例如在這個URL中增加一個節點,如改成polls/specifics/12/,此時只要修改urls.py中的定義即可:
path('specifics/<int:question_id>/', views.detail, name='detail'),
3.11.2 為超鏈接添加命名空間
命名空間可以有效地隔離變量,防止出現名稱相同的變量之間調用混亂的問題。Django中可以為URL定義命名空間。試想一下,在真實項目中往往會存在很多應用程序,而不同應用程序之間可能存在同名的視圖,如多個應用程序中都存在detail視圖,那么在{% url %}標簽中如何確定調用哪一個應用程序中的URL呢?此時可以通過為URL添加命名空間的方式解決以上問題。
打開polls/urls.py文件,在其中添加app_name變量來設置URLconf的命名空間,修改后的代碼如下:

接下來修改polls/index.html模板中的URL,為detail視圖添加命名空間:

此時單擊index頁面中的超鏈接仍能正常顯示。
- Python編程自學手冊
- 深入理解Bootstrap
- 大學計算機基礎實驗教程
- vSphere High Performance Cookbook
- Java Web及其框架技術
- 軟件測試工程師面試秘籍
- Effective Python Penetration Testing
- MySQL數據庫管理與開發(慕課版)
- 精通網絡視頻核心開發技術
- Jenkins Continuous Integration Cookbook(Second Edition)
- Linux C編程:一站式學習
- Android Game Programming by Example
- Java7程序設計入門經典
- Drupal 8 Development Cookbook(Second Edition)
- Python 3.6從入門到精通(視頻教學版)