Django 模板引擎以及模板

在Django框架中,可使用兩種模板引擎,一種是默認的Django模板引擎,還有一種是Jinja2模板引擎html

1.模版引擎的做用和優勢

模版引擎做用是將View視圖中須要在前端HTML頁面中展現的數據,經過模板引擎的語法規則,展現出來;前端

模版引擎優勢是將業務邏輯的Python代碼和頁面設計的HTML代碼分離,使代碼更乾淨整潔更容易維護,使Python程序員和HTML/CSS程序員分開協做,提升生產的效率,且將HTML代碼分離出來,還能使其可以複用;python

2.HTML模板存放的位置

HTML模板存放的位置有兩個,一個是存放在settings文件中指定的DIRS的目錄列表中,還有一個是直接在對應的APP包下,建立templates目錄,將HTML放置於此便可,不一樣APP對其餘APP目錄下的templates目錄都是可見的;程序員

3.模板引擎的配置

先在項目的settings.py文件中找到TEMPLATES變量,而後加入正則表達式

TEMPLATES = [
    {
        # 選擇模板引擎,默認是Django的模板引擎
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        #或者是jinja2模版  'BACKEND': 'django.template.backends.jinja2.Jinja2'

        # 指定HTML模板存放的目錄,若是HTML模板較多,能夠設置多個模板路徑
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        # APP_DIRS的值判斷是否支持將template目錄放置在APP中,Django默認支持值爲True
        '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',
            ],
        },
    },
]

4.Django模板引擎的模板語法

變量(VARIABLE):django

{{ VARIABLE }}   # 用於引入後臺傳入的變量
{{ VARIABLE.name }}
{{ VARIABLE.age }}

標籤(TAG):數組

{% TAG %}   # 用於循環

1: 正序 for 循環
{% for item in items %}
    <p>{{ forloop.counter }}</p>
    <p>{{ item.name }}</p>
    <p>{{ item.desc }}</p>
{% endfor %}

2: 倒敘 for 循環
{% for item in items reversed %}
    <p>{{ forloop.counter }}</p>       # 記錄循環到第幾回,計數從1開始
    <p>{{ item.name }}</p>
    <p>{{ item.desc }}</p>
{% endfor %}

3: 變量字典
{% for k,v in dictionary.items %}
    <p>{{ k }},{{ v}}</p>
{% endfor %}

5.Django模板的繼承的做用

在Django開發過程當中,頁面中的重複部分,能夠經過Django的模板繼承來完成,這樣使得頁面開發和管理更簡單;app

在HTML頁面中使用到的關鍵字:框架

{% extends 這裏填寫被繼承的HTML頁面 %}

{% block 這裏填寫繼承的block %}  {% endblock %}

{% include 這裏填寫須要引入的HTML子頁面 %}

6.如何實現繼承模板

咱們知道了模板能夠用繼承的方式來實現複用,那接下來咱們一塊兒來操做一下:函數

第一步:能夠在項目的templates中先編寫好一個html頁面,做爲網站的基礎頁面被其餘頁面繼承,個人HTML頁面爲base.html,而後在其中編輯HTML代碼,注意要修改的部分寫在{% block %} {% endblock %}的中間;

<body>
    <div class="header">
        今天是星期幾呀
    </div>
    
    <!-- 內容變化部分 -->
    {% block content %}
    <div class="content">
        <p>今天是星期一</p>
    </div>
    {% endblock %}
    
    <div class="footer">
        好的,謝謝
    </div>
</body>

第二步:在你想要的app的templates目錄下建立一個html頁面,繼承以前的基礎頁面,我仍是使用的courses app,建立一個python.html文件,這些名字均可以本身命名的,不過要注意路徑之類的;

{% extends 'base.html' %}
{% block content %}
     <div class="content">
        <p>今天是星期{{ week_id }}</p>
    </div>
{% endblock %}

第三步:在根路由urls.py中,添加訪問路徑的路由文件,必定要分清項目的了路由和app的路由喲

url(r'^courses/', include(('courses.urls', 'courses'), namespace='courses')),

第四步:在app的路由文件urls.py中添加要訪問的html路徑;

urlpatterns = [
    url(r'python/(?P<week_id>\d+)$', python, name='python')
]

第五步:在app下的views.py中建立一個python函數;

from django.shortcuts import render

def python(request, week_id):
    return render(request, 'python.html', {'week_id': week_id})

而後咱們就能夠運行項目,運行項目依舊是打斷點,而後調試,咱們看看結果是不是咱們預期的結果呢,好比個人訪問路徑是

http://127.0.0.1:8000/courses/python/1

python後面接數字,否則會報錯,由於咱們在第四步中添加路由訪問的html路徑的時候正則表達式驗證必須是數組,這個能夠你們本身修改的,能夠按照本身的想法來作練習喲;

相關文章
相關標籤/搜索