django學習--templates模板

Bart_G發表於2017-06-04

1 自定義urls

每次建立的view和對應的url對映總要配置在專案主目錄的urls.py中,如果配置的多了的話
會很麻煩而且不便於維護,所以django支援我們自定義的urls並使用
django.conf.urls.include([views.[方法]])方法匯入對應的對映方法

1.1 開始建立自定義的urls.py

在blog目錄下建立urls.py檔案,按照主目錄的urls.py格式建立

# -*- coding:utf-8 -*-
'''
Created on 2017年6月4日
@author: hp
自定義的urls配置檔案

'''
# 匯入django.conf.urls模組中的函式url,include
from django.conf.urls import url,include
from django.contrib import admin

# 匯入檢視模組blog.views
import blog.views as bv

# url()中第一個引數後面不要忘記'/'否則會找不到路徑
urlpatterns = [
    url(r'^index/$',bv.index)
]

測試

這裡寫圖片描述

2. 開發Template模板

在django中我們通過template模板返回我們指定的檢視介面

2.1 建立自定義的template

找到blog目錄下,建立template資料夾並建立要返回的html頁面
目錄結構:
這裡寫圖片描述
index.html:

<html>
    <head>
        <title>Blog</title>
    </head>
    <body>
        <h1>Hello,Blog</h1>
    </body>
</html>

配置views.py

# -*- coding:utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render

# 匯入HttpRequest模組
from django.http import HttpResponse

# Create your views here.
# 在此處建立自己的程式碼

# 定義一個函式,引數名一般為request
# 使用render()函式返回檢視,引數1是request,引數2是templates中的html檔名
def index(request):
    return HttpResponse(render(request,'index.html'))

測試

這裡寫圖片描述

2.2 存在的問題

上個測試的時候我們成功地訪問了頁面,但是如果出現連個同樣名字的index.html,Django會尋找templates資料夾,結果發現有連個一模一樣的檔案,那麼django會按照在settings.pyINSTALLED_APPS中配置的順序訪問對應的html頁面

2.3 問題說明

我們之前已經建立過article模組,所以我們在article中建立templates資料夾,在該資料夾中建立index.html檔案,然後在views.py中配置返回對應的檢視,在urls.py中配置對映的url路徑
article模組目錄結構:
這裡寫圖片描述
urls.py

# coding:utf-8
'''
Created on 2017年6月4日
@author: hp
'''
from django.conf.urls import url
from django.contrib import admin

import article.views as av

urlpatterns = [url('^index/$',av.index)]

views.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render

# 匯入HttpRequest模組
from django.http import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse(render(request,'index.html'))

最後別忘記在主目錄的urls.py中新增article的urls檔案

# 配置URL對映
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^blog/', include('blog.urls')),
    url(r'^article/', include('article.urls')),
]

測試

這裡寫圖片描述
明明輸入的是http://127.0.0.1:8000/article/index/的時候響應的確實blog的index.html頁面,這就是上面我們所講的存在的問題。

解決方式

django為我們建議瞭解決方式,那就是在對應的templates資料夾中再建立一個對應模組的資料夾,然後把對應的html檔案放在裡面就好了
目錄結構:
這裡寫圖片描述
修改views.py檔案中的響應方法新增'article/index.html':

def index(request):
    return HttpResponse(render(request,'article/index.html'))

這裡寫圖片描述
修改views.py檔案中的響應方法新增'blog/index.html':

def index(request):
    return HttpResponse(render(request,'blog/index.html'))

再次測試

這裡寫圖片描述
發現已經恢復正常了

相關文章