Django專案建立之---Templates及擴充套件(二)
1.建立步驟
在APP的根目錄下建立名為templates的目錄,然後在該目錄
下建立HTML檔案(檔案上滑鼠右鍵,選擇New–>HTML File),命名為index.html,程式碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>{{hello}}</h1>
</body>
</html>
2.在views.py中返回render(),程式碼如下:
from sys import modules
from django.shortcuts import render # render為Django自動新增,render為渲染
from django.http import HttpResponse
from . import models
def index(request):
# 通常傳遞三個引數,第一個為request,請求物件本身;
# 第二個為模版檔案,即頁面,即index.html;
# 第三個為傳遞到前端的資料
return render(request, 'index.html', {'hello': 'Hello, Blog!'})
3.執行結果(瀏覽器位址列輸入:localhost:8000/blog/index)
擴充套件
DTL的初步使用:render()函式中支援一個dict型別(字典型別)引數,即鍵值對;該字典是後臺傳遞到模板的引數,鍵為引數名;在模板中使用{{引數名}}來直接使用。
注意事項
問題:Django查詢template,Django按照INSTALLEN_APPS
中新增順序查詢templates,不同的APP下Templates目錄中的同名.html檔案會造成衝突。
解決templates衝突方案:在APP的templates目錄下建立以APP名為名稱的目錄,將html檔案放入新建立的目錄下,即在中間加一層APP的名來區分相同名稱的.html檔案。
小技巧
第一個:什麼是templates過濾器?
1.寫在模板中,屬於Django模板語言
2.可以修改模板的變數,從而顯示不同的內容
第二個:怎麼使用Templates過濾器?
{{ value | filter }}
例如:{{ list_nums | length}} , length表示前面list的長度,因此,此{{ }}中顯示的內容就不再是前面的list的內容了,而是list的長度
第三個:過濾器怎麼疊加?
{{ value | filter2 | filter2 | …}}
如下程式碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Edit Page</title>
</head>
<body>
<form action="{% url 'blog:edit_action' %}" method="post">
{% csrf_token %}
{# {% if article %}#}
<input type="hidden" name="article_id" value="{{ article.id | default:'0' }}">
<label>文章標題
<input type="text" name="title" value="{{ article.title }}">
</label>
<br/>
<label>文章內容
<input type="text" name="content" value="{{ article.content }}">
</label>
<br/>
{# {% else %}#}
{# <input type="hidden" name="article_id" value="0">#}
{# <label>文章標題#}
{# <input type="text" name="title" value="">#}
{# </label>#}
{# <br/>#}
{# <label>文章內容#}
{# <input type="text" name="content" value="">#}
{# </label>#}
{# <br/>#}
{# {% endif %}#}
<input type="submit" value="修改">
</form>
</body>
</html>
如果上述程式碼不在{% if article %}下面的value=”{{ article.id | default:’0’ }}”中加入過濾器,就必須在下面重新寫上一段特別冗餘的{% else %}}