django入门(二)POST、TEMPLATE和CVS示例

django入门(二)POST、TEMPLATE和CVS示例

阅读别人的中文笔记
http://www.woodpecker.org.cn/obp/django/django-stepbystep/newtest/doc/

step by step(二)
1 创建文件Add.py
# -*- coding: UTF-8 -*-
'''
Created on 2010-1-18
@author: sillycat
'''
from django.http import HttpResponse
#注意/add/,后面的/是要POST数据必须的
text = """<form method="post" action="/add/">
    <input type="text" name="a" value="%d"> + <input type="text" name="b" value="%d">
    <input type="submit" value="="> <input type="text" value="%d">
</form>"""
def index(request):
    if request.POST.has_key('a'):
        #REQUEST= POST OR GET,更强大
        #a = int(request.POST['a'])
        #b = int(request.POST['b'])
        a = int(request.REQUEST['a'])
        b = int(request.REQUEST['b'])
    else:
        a = 0
        b = 0
    print type(text) # '''三个引号比较猛
    return HttpResponse(text % (a, b, a + b))

2 修改urls.py,加入如下代码:
(r'^add/$', 'easydjango.src.com.sillycat.easydjango.Add.index'),

在py文件中加入了中文注释后,出现如下错误信息:
SyntaxError at /add/
("Non-ASCII character '\\xe6' in file D:\\work\\easydjango\\..\\easydjango\\src\\com\\sillycat\\easydjango\\Add.py on line 8, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details", ('D:\\work\\easydjango\\..\\easydjango\\src\\com\\sillycat\\easydjango\\Add.py', 8, 0, None))
在加入了中文注释的py文件中,加上:
# -*- coding: UTF-8 -*-
问题解决

访问http://localhost:8000/add 后,能显示到我们做的简单WEB加法。

step by step(三)

1.创建py文件List.py
#coding=utf-8
'''
Created on 2010-1-18
@author: sillycat
'''
from django.shortcuts import render_to_response
address = [
    {'name':'张三', 'address':'地址一'},
    {'name':'李四', 'address':'地址二'}
    ]
def index(request):
    return render_to_response('list.html', {'address': address})
第一个参数是模版文件,第二个参数是个字典变量,key是address,value是一个list

2.创建template目录
修改settings.py文件如下:
TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    './template',
)

3.新建list.html文件:
<h2>通讯录</h2>
<table border="1">
  <tr><th>姓名</th><th>地址</th></tr>
  {% for user in address %}
  <tr>
  <td>{{ user.name }}</td>
  <td>{{ user.address }}</td>
  </tr>
{% endfor %}
</table>
在 Django 模板中 {{}} 表示引用一个变量, {%%} 表示代码调用。

4.修改urls.py文件
(r'^list/$', 'easydjango.src.com.sillycat.easydjango.List.index'),

访问http://localhost:8000/list就看到效果了:)

step by step(四)
1.在原有的list.html最后加上
<p><a href="/csv/address/">csv格式下载</a></p>

2.新的py文件Csv.py如下:
#coding=utf-8
'''
Created on 2010-1-18

@author: sillycat
'''
from django.http import HttpResponse
from django.template import loader,Context

#tuple列表
address = [
      ('张三','addre11ss1'),
      ('李四','address2')    
           ]
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
3.写模版csv.html如下:
{% for row in data %}"{{ row.0|addslashes}}", "{{ row.1|addslashes}}",
{% endfor %}

4.修改urls.py
(r'^csv/(?P<filename>\w+)/$', 'easydjango.src.com.sillycat.easydjango.Csv.output'),

(?P<filename>\w+) 这是一个将解析结果起名为 filename 的正则表达式,它完全符合 Python 正则表达式的用法。在最新的 Django 中,还可以简化一下: (\w+)

那么修改为:
(r'^csv/(\w+)/$', 'easydjango.src.com.sillycat.easydjango.Csv.output'),

点击链接,能打开csv文件,但是导出的address.csv有乱码问题,暂时没有得到解决

你可能感兴趣的:(html,python,正则表达式,django,cvs)