编写第一个Django程序(4)
编写第一个Django程序(3)
ok,我们接着之前的第3篇,开始我们的最后一篇.
创建一个简单的表单
我们修改一个测试页面的模板(polls/detail.html).
{{ poll.question }}
{% if errormessage %}{{ error
message }}{% endfor %}
简单说明一下:
1.上面的模板用单选框来展示一个民意测试的所有投票项.它的值就是对应的ID,他的名称就是对应选项的名称,他的作用就是当选中一个选项,然后提交表单,他将会传送一个post数据,choice=3
2. 我们把这个表单的action写作’ /polls/{{ poll.id }}/vote/‘,方法写为post.
3. forloop.counter指明循环多少次.
4. 既然我们创建了一个提交数据的表单,我们就需要关心注意 一下Cross site request forgeries.不错的是,你不需要担心怎么实现.Django已经内建通过支持了.简单的说,就是所有的post表单都指向到内部的一个地址,我们使用{% csrf_token%}标签完成.
这个{% csrf_token %}标签要从请求对象中获取信息,在模板的内容中我们不能获取它.我们需要在detail的view方法中做一个小的改动:
from django.template import RequestContext # ... def detail(request, pollid): p = getobjector404(Poll, pk=pollid) return rendertoresponse('polls/detail.html', {'poll': p}, contextinstance=RequestContext(request))
详细的说明请参考:https://docs.djangoproject.com/en/1.3/ref/templates/api/#subclassing-context-requestcontext
现在,我们创建view方法来处理提交过来的请求数据,在第三节中我们有这样一句:
(r'^(?P\d+)/vote/