Skip to content
On this page

建立模板 Templates

這裡模板使用與 FastAPIFlask 一樣使用 Jinja 語法,這是 python框架的前端頁面常用模板引擎。

在標籤內都使用 雙括弧 來置入後端提供的變數與vuejs 相似。

ifloop條件的判斷、迴圈式,則需要在標籤上加入<% if %><% endif %>

html
<!DOCTYPE html>
    <html>
        <body>
           <!-- 判斷式 -->
            <% if abc==1 %>
                <!-- 迴圈 -->
                <% for todo in todos %>
                    <p> {{ todo name }} </p>
                <% endfor %>             
            <% endif %>   
       </body>
    </html>

前端輸入模板

這裡建立一個 input.html 模板,來將輸入的數據post送到後端。這裡有掛上 {% csrf_token %},這是簡易的預防被 CSRF攻擊、偽造等。

html
<form action="addrecord/" method="post">
    {% csrf_token %}
    <label> First Name: </label>
    <input name="first">
    <label> Last Name: </label>
    <input name="last">
    <input type="submit" value="Submit">
</form>

註冊模板

Django中所有模板資料夾一律命名為templates,且須放置在各自的app應用資料夾內,不用註冊;但前後端拆分不同人編寫時,肯定位置或命名會不同,就必須要告訴 Django放在哪裡。

py
# settings.py
TEMPLATES=[
    # ...
    'DIRS':['templates']
    # ...
]
# ...

再來則需要告訴 view 來導向模板,這裡有幾種方法 renderloader.get_template(),試過 render是可行,而 loader.get_template() 還在測試。

py
from django.shortcuts import render
# ...
def index(request):
    return render(request,'index.html')
# ...

靜態文件註冊

Django不會知道你的靜態文件放在哪裡,所以也要指定資料夾,新增以下這串內容才能啟用。

py
# settings.py
STATICFILES_DIRS=[
    os.path.join(BASE_DIR, 'frontend_myvue/dist/static')
]

網路有人這樣寫:

py
MEDIA_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_URL = 'frontend_myvue/dist/'

官方這樣寫:

py
STATIC_URL='static/'