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:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5SOhdjN5YWOwMDNlNjNyQGO2gTO0YmMjRmN2ATZmV2N00SMwITN4ATMw8CX3AzMxAjMvwVMzkjN3QzLcd2bsJ2Lc12bj5ycn9Gbi52YuAzcldWYtl2Lc9CX6MHc0RHaiojIsJye.jpg)
- 修改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的開發流程,下面是改進上述通訊錄,提供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伺服器中通路:
點選“csv格式下載下傳”則會下載下傳儲存為csv格式檔案。
至此,也涉及到了Django中的V(View)和T(Template),還差一個M,則接下來就和資料庫(Model)打交道了。
作者:
zhoujie出處:
http://www.cnblogs.com/zhoujie/本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,不然我擔心部落格園找你算賬
如果您覺得本文對你有幫助,請豎起您的大拇指右下角點推薦,也可以關注我