1. 程式人生 > >Django專案建立之---Templates及擴充套件(二)

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 %}}