前言
html是一個靜態的語言,裏面沒法傳一些動態參數,也就是一個寫死的html頁面。如果想實現在一個固定的html樣式,傳入不同的參數,這就可以用django的模板傳參來解決。
《玩轉Django2.0》是最近出版的,語法比較新,基礎部分很詳細,初學者值得入手!
模板參數
先在hello應用下新建一個templates文件夾,層級目錄如下
└─helloworld │ db.sqlite3 │ manage.py │ __init__.py │ ├─hello │ │ admin.py │ │ apps.py │ │ models.py │ │ tests.py │ │ views.py │ │ __init__.py │ │ │ ├─migrations │ │ │ __init__.py │ │ │ ├─templates │ │ yoyo.html │ │ __init__.py │ └─helloworld │ settings.py │ urls.py │ wsgi.py │ __init__.py
新建一個yoyo.html文件,hello/templates/yoyo.html文件內容如下,模板變量用{{變量名稱}}
來表示
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>上海-悠悠</title> </head> <body> <h1>hello world! {{name}}同學</h1> </body> </html>
在settings.py腳本里面添加模板的路徑,修改TEMPLATES 中的 DIRS 爲[BASE_DIR+"/hello/templates",]
BASEDIR的值前面已經定義爲當前腳本的路徑:`os.path.dirname(os.path.dirname(os.path.abspath(_file)))`
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR+"/hello/templates",], # 默認爲[] 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
視圖與url
hello/views寫個視圖函數,內容如下
from django.http import HttpResponse, Http404 # Create your views here. def yoyo(request): context = {} context['name'] = '悠悠' return render(request, 'yoyo.html', context)
helloworld/urls.py添加訪問路徑
from django.conf.urls import url from django.urls import re_path, path from hello import views urlpatterns = [ path("yoyo/", views.yoyo), ]
接着在瀏覽器輸入地址:http://127.0.0.1:8000/yoyo/
就能訪問了
Django 模板標籤
if/else 標籤
條件判斷if語句,最後endif結束
{% if condition1 %} ... display 1 {% elif condition2 %} ... display 2 {% else %} ... display 3 {% endif %}
for 標籤
與Python的 for 語句的情形類似,循環語法是 for X in Y ,Y是要迭代的序列而X是在每一個特定的循環中使用的變量名稱。
每一次循環中,模板系統會渲染在 {% for %} 和 {% endfor %} 之間的所有內容。
<ul> {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %} </ul>
ifequal/ifnotequal 標籤
{% ifequal %} 標籤比較兩個值,當他們相等時,顯示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。 下面的例子比較兩個模板變量 user 和 currentuser :
{% ifequal user currentuser %} <h1>Welcome!</h1> {% endifequal %}
和 {% if %} 類似, {% ifequal %} 支持可選的 {% else%} 標籤
{% ifequal section 'sitenews' %} <h1>Site News</h1> {% else %} <h1>No News Here</h1> {% endifequal %}
註釋標籤
Django 註釋使用 {# #}。
{# 這是一個註釋 #}