1. 程式人生 > >django-5.模板templates

django-5.模板templates

javascrip backend res 次循環 image 結束 view ali 分享

前言

html是一個靜態的語言,裏面沒法傳一些動態參數,也就是一個寫死的html頁面。如果想實現在一個固定的html樣式,傳入不同的參數,這就可以用django的模板傳參來解決。

模板參數

先在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",]


BASE_DIR的值前面已經定義為當前腳本的路徑: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 註釋使用 {# #}。

{# 這是一個註釋 #}

django-5.模板templates