天天看點

Django入門實踐(二)

Django模闆簡單執行個體

  上篇中将html寫在了views中,這種混合方式(指Template和views混在一起)不适合大型開發,而且代碼不易管理和維護,下面就用Django自帶的模闆來學習(顯示一個通訊簿)。

  •  在views.py中添加函數addressbook
from django.shortcuts import render_to_response

.....

address=[
{'name':'zhou','address':'上海'},
{'name':'zhang','address':'北京'}
]
 #這裡的address不是字典清單,而是元組清單
def addressbook(request):
    return render_to_response('list.html',{'address':address})      
  • 建立目錄templates,用來存放模闆檔案;并在目錄templates下建立檔案list.html:
Django入門實踐(二)
  • 修改settings.py,将templates所在的路徑加入TEMPLATE_DIRS中,若有多個模闆目錄,都可以加入這個元組,Django會按順序搜尋這些目錄:
TEMPLATE_DIRS = (
    'C:/Python27/Scripts/mysite/templates', #注意這裡不是反斜杠
)      
  • 修改urls.py:
urlpatterns = patterns('',
    url(r'^$',hello),
    url(r'^add/$',add),
    url(r'^list/$',addressbook),    <==添加這句
)      
  • 啟動web服務(python manage.py runserver),通路url:
Django入門實踐(二)

  從上面這個例子大概可以看出了Django的開發流程,下面是改進上述通訊錄,提供csv格式的通訊錄下載下傳。

  • 修改list.html,在templates/list.html尾部加上一行:
<p><a href="/csv/address/">csv格式下載下傳</a></p>      

這段代碼會在通訊錄表格下顯示一個指向csv格式的通訊錄檔案的超連結。

  • 在views.py中添加函數output用來儲存為csv檔案:
from django.template import loader,Context
...

def output(request, filename):
    response = HttpResponse(mimetype='text/csv')
    response['Content-Disposition'] = 'attachment; filename =%s.csv' % filename
    t = loader.get_template('csv.html')
    c = Context({'data':address})
    response.write(t.render(c))
    return response      

  這裡沒有使用簡便的“render_to_response”,因為需要修改response對象的值,而“render_to_response”封裝了response,我們無法修改它(參見Djangobook)。實際的工作流程是:建立response對象(HttpResposne類的一個執行個體),修改response的屬性,加載模闆(先生成template對象,再生成Context對象),渲染模闆(t.render(c)),傳回準備好的response對象

  (關于儲存的檔案格式,這個網上很多,可以儲存為txt、csv、pdf等格式檔案)

  • 在templates目錄下建立檔案csv.html:
{% for row in data %}
{{ row.name|addslashes }}, {{ row.address|addslashes }}
{% endfor %}      
  • 修改urls.py:
urlpatterns = patterns('',
    url(r'^$',hello),
    url(r'^add/$',add),
    url(r'^list/$',addressbook),
    url(r'csv/(?P<filename>\w+)/$',output),    <==添加此句
)      

增加了url映射後,通路/csv/address将調用csv.output(filename='address')

  • 在Web伺服器中通路:
Django入門實踐(二)

點選“csv格式下載下傳”則會下載下傳儲存為csv格式檔案。

  至此,也涉及到了Django中的V(View)和T(Template),還差一個M,則接下來就和資料庫(Model)打交道了。

作者:

zhoujie

出處:

http://www.cnblogs.com/zhoujie/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,不然我擔心部落格園找你算賬

如果您覺得本文對你有幫助,請豎起您的大拇指右下角點推薦,也可以關注我