Python筆記(五)--Django中使用模板

  使用Django開發網站時,若是不使用模板,那麼將會很不合理。由於咱們全部的html代碼都須要被硬編碼到咱們的Python代碼中。咱們新建一個工程,而後再在新建一個應用程序,並在其中的views.py文件中添加以下代碼:html

 1 #coding=UTF-8
 2 from django.http.response import HttpResponse, Http404
 3 import datetime
 4 
 5 def hours_ahead(request,offset):
 6     try:
 7         offset = int(offset)
 8     except ValueError:
 9         raise Http404()
10     
11     dt = datetime.datetime.now() + datetime.timedelta(hours = offset)   #datedelta()中參數必須是整型
12     html = "<html><body>In %s hour(s),it will be %s.<body/><html/>"%(offset,dt)
13     return HttpResponse(html)

  從上面的代碼中就能夠看出,咱們的HTML代碼和咱們的Python混合在一塊兒了,這樣不只影響開發速度,也不便於後期維護。下面我會詳細介紹django中的模板。模板的做用是要實現將HTML代碼和Python代碼分開。首先在咱們應用程序下面新建一個templates文件夾,以後咱們的全部模板都會放在這個文件夾下面,由於django1.6的setting.py文件中沒有TEMPLATE_DIRS這個選項,取而代之的是它會默認去尋找template文件夾下面的模板。咱們在這個文件夾下面新建一個html。這個html文件中主要是放一些咱們頁面不會變化或者不多變化的代碼,而那些常常變化的代碼咱們使用{%block%}{%endblock%}進行申明,而後在子頁面中能夠對這部分代碼進行覆蓋。base.html代碼以下:正則表達式

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>{%block title%}{%endblock%}</title>
 6 </head>
 7 <body>
 8     <h1>My helpful timestamp site</h1>
 9     {%block content%}{%endblock%}
10     {%block footer%}
11     <hr>
12     <p>Thanks for visiting my site</p>
13     {%endblock%}
14 </body>
15 </html>

  上面代碼中,咱們使用模板標籤將html的title,content,以及footer進行了佔位。而後再新建一個current_datetime.html的頁面繼承咱們的base.html頁面,而後對其中的title,content部分進行覆蓋,footer部分保留父頁面base.html中的代碼。代碼以下:django

1 {%extends "base.html"%}    <!--使用extends繼承base.html頁面。必須放在第一行-->
2 
3 {%block title%}The current time{%endblock%}<!--定義title代碼塊中的內容-->
4 
5 {%block content%}    <!--定義content代碼塊中的內容-->
6 <P>It is now {{current_date}}.</p>
7 {%endblock%}

  這樣使用以後,咱們訪問current_datetime.html頁面的時候總體框架是base.html中所定義的,而局部效果回事咱們current_datetime.html中所定義的。對於一個網站而言,咱們能夠定義儘量多的{%block%},這樣咱們子頁面繼承的時候會有較好的擴展性。下面是視圖views.py中所定義的函數代碼:框架

 1 from datetime import datetime
 2 from django.shortcuts import render_to_response
 3 # from django.template.loader import get_template
 4 # from django.template.context import Context
 5 # from django.http.response import HttpResponse
 6 
 7 # Create your views here.
 8 # def current_time(request):
 9 #     now = datetime.now()
10 #     t = get_template('current_time.html')
11 #     html = t.render(Context({'current_date':now}))
12 #      
13 #     return HttpResponse(html)
14 
15 def current_time(request):
16     now = datetime.now()
17     return render_to_response('current_datetime.html',{'current_date':now})

  上面的函數返回當前的時間,註釋部分和沒註釋的代碼效果是同樣的。值得注意的是使用render_to_response函數時,其第一個參數必須是要使用模板的名稱。第二個參數是可選的,若是你要給定這個參數,那麼這個參數必須是爲該模板建立Context時所使用的字典。若是不給定,函數將使用一個空字典。下面是應用程序中urls.py的代碼:函數

1 from django.conf.urls import patterns, url
2 from Second import views
3 
4 urlpatterns = patterns('',
5     url(r'^time/', views.current_time),
6 )

  urls.py是將咱們視圖views.py中的代碼和咱們以後訪問頁面在地址欄中所輸入的地址進行綁定。url()中的第一個參數是一個正則表達式,第二個參數是咱們要綁定的函數代碼。配置好咱們應用程序的urls.py以後,咱們還須要在咱們項目的urls.py中進行配置,具體以下:網站

1 from django.conf.urls import patterns, include, url
2 
3 urlpatterns = patterns('',
4     url(r'^Second/',include('Second.urls'))
5 )

  在這裏咱們使用include將咱們應用程序Second中的urls引入。並指定咱們要訪問頁面的正則表達式。結合兩個urls.py中正則表達式所描述的url,咱們以後在訪問頁面的時候,路徑應該是http://localhost:8000/Second/time/。這裏端口8000是默認的。咱們能夠選擇咱們想要的端口號,可是前提是那個端口號沒有被其它應用程序佔用。最有咱們在項目的setting.py將咱們的應用程序進行註冊。打開項目的setting.py,在INSTALLED_APPS中將咱們應用程序的名字加入。以下:編碼

  而後咱們啓動服務,並訪問localhost:8000/Second/time,能夠看到下面的效果。url

相關文章
相關標籤/搜索