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

來源:互聯網
上載者:User

標籤:

  使用Django開發網站時,如果不使用模板,那麼將會很不合理。因為我們所有的html代碼都需要被寫入程式碼到我們的Python代碼中。我們建立一個工程,然後再在建立一個應用程式,並在其中的views.py檔案中添加如下代碼:

 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中的代碼。代碼如下:

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, url2 from Second import views3 4 urlpatterns = patterns(‘‘,5     url(r‘^time/‘, views.current_time),6 )

  urls.py是將我們視圖views.py中的代碼和我們之後訪問頁面在地址欄中所輸入的地址進行綁定。url()中的第一個參數是一個Regex,第二個參數是我們要綁定的函數代碼。配置好我們應用程式的urls.py之後,我們還需要在我們項目的urls.py中進行配置,具體如下:

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

  在這裡我們使用include將我們應用程式Second中的urls引入。並指定我們要訪問頁面的Regex。結合兩個urls.py中Regex所描述的url,我們之後在訪問頁面的時候,路徑應該是http://localhost:8000/Second/time/。這裡連接埠8000是預設的。我們可以選擇我們想要的連接埠號碼,但是前提是那個連接埠號碼沒有被其它應用程式佔用。最有我們在項目的setting.py將我們的應用程式進行註冊。開啟項目的setting.py,在INSTALLED_APPS中將我們應用程式的名字加入。如下:

  然後我們啟動服務,並訪問localhost:8000/Second/time,可以看到下面的效果。

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.