Django入门实践(二)
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:
- 修改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)打交道了。
Django入门实践(二)的更多相关文章
- Django入门实践(三)
Django入门实践(三) Django简单应用 前面简单示例说明了views和Template的工作过程,但是Django最核心的是App,涉及到App则会和Model(数据库)打交道.下面举的例子 ...
- Django入门实践(一)
Django入门实践(一) Django编程思路+入门 认识Django有一个多月了,我觉得学习Django应该先理清它的编程思路.它是典型的MVC框架(在Django里也称MTV),我觉得Djang ...
- 【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World
操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service doc ...
- Django入门实践(3)
Django简单应用 前面简单示例说明了views和Template的工作过程,但是Django最核心的是App,涉及到App则会和Model(数据库)打交道.下面举的例子是创建一个简单应用wiki ...
- django入门(二)MTV开发模式
MTV开发模式,顾名思义,M是models,T是templates,V是view. 之前的教程没有牵扯到html,然后今天将告诉你如何转到自己做的静态页面 首先还是先创建一个app,python ma ...
- c++开发ocx入门实践二
原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/51374355 IDE:vs2010,c++,测试工具,vs自带的TstCo ...
- Django入门与实践 17-26章总结
Django入门与实践-第17章:保护视图 Django 有一个内置的视图装饰器 来避免它被未登录的用户访问: 现在如果用户没有登录,将被重定向到登录页面: 现在尝试登录,登录成功后,应用程序会跳转到 ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- 分布式学习系列【dubbo入门实践】
分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...
随机推荐
- jenkins综合cobertura,来电显示cobertura的report
我的项目是使用maven作为构建工具.左右maven如何整合jenkins请参阅: http://blog.csdn.net/yaominhua/article/details/40684355 本文 ...
- [LeetCode]Copy List with Random Pointer &Clone Graph 复杂链表的复制&图的复制
/** * Definition for singly-linked list with a random pointer. * struct RandomListNode { * int label ...
- Asp.net vNext 2
Asp.net vNext 学习之路(二) View component(视图组件)应该是MVC6 新加的一个东西,类似于分部视图.本文将演示在mvc 6中 怎么添加视图组件以及怎么在视图中注入一个服 ...
- 那些必须要知道的Javascript
原文:那些必须要知道的Javascript JavaScript是前端必备,而这其中的精髓也太多太多,最近在温习的时候发现有些东西比较容易忽略,这里记录一下,一方面是希望自己在平时应用的时候能够得心应 ...
- API接口开发简述示例
作为最流行的服务端语言PHP(PHP: Hypertext Preprocessor),在开发API方面,是很简单且极具优势的.API(Application Programming Interfac ...
- 增加VMWare开机画面时间,来防止快速跳过而无法进入BIOS
用记事本打开xx.vmx,在里面添加一行: bios.bootDelay = "30000" 意思是开机后,在开机画面里停留30秒.
- Visual Studio 单元测试之五---数据库测试
原文:Visual Studio 单元测试之五---数据库测试 数据库的单元测试主要是测试数据库中的数据是否符合特定的条件,Visual Studio 2010支持下面几种数据的单元测试类型(Visu ...
- C# 解析bt种子
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...
- 【SSH三个框架】Hibernate第八部分基础:经营-many关系
在Hibernate在-many关系.它通常不使用.由于当数据库查询复杂度太高时. 我们在这里做的是学生和教师,学生可以有多个老师,教师可以有多个学生. watermark/2/text/aHR0cD ...
- 使用hibernate在5秒内插入11万条数据,你觉得可能吗?
需求是这样的,需要查询某几个表的数据,然后插入到另外一个表. 一看到需求,很多人都会用hibernate去把这些数据都查询出来,然后放到list中, 然后再用for循环之类的进行遍历,一条一条的取出数 ...