建立模板 Templates
這裡模板使用與 FastAPI
、Flask
一樣使用 Jinja
語法,這是 python
框架的前端頁面常用模板引擎。
在標籤內都使用 雙括弧
來置入後端提供的變數與vuejs
相似。
if
、loop
條件的判斷、迴圈式,則需要在標籤上加入<% 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 來導向模板,這裡有幾種方法 render
、loader.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/'