投票系统四:前台页面
现在已经可以在后台管理投票了,现在就差怎么在前台显示和如何投票了
1、index:首先第一个要有首页,用来显示所有的投票
2、detail:详细信息页面,用来显示一个投票及相应的选项
3、results:结果页面,用来查看一个投票的结果
以及一个投票的操作
在polls/views.py页面添加如下代码
from django.http import HttpResponse
def index(request):
return HttpResponse("hello,world,you are at the poll index")
打开polls/urls.py,设置如下url路由信息
from django.conf.urls import patterns,url
from polls import views
urlpatterns=patterns('',
url(r'^$',views.index,name='index'),
)
打开项目下面的urls.py 即mysite/urls.py 用把poll应用下的url包含到主urls配置里面。
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^polls/',include('polls.urls')),
)
打开页面可以测试一下
如果要想往views里面的方法传递参数呢
修改下面的poll/url.py
from django.conf.urls import patterns,url
from polls import views
urlpatterns=patterns('',
url(r'^$',views.index,name='index'),
url(r'^(?P<poll_id>d+)/results/$',views.results,name='results'),
url(r'^(?P<poll_id>d+)/vote/$',views.vote,name='vote'),
)
在polls/views.py
from django.http import HttpResponse
from django.template import Context,loader
from polls.models import Poll
def index(request):
latest_poll_List=Poll.objects.order_by('-pub_date')[:5]
template=loader.get_template('index.html')
context=Context({'latest_poll_list':latest_poll_list,})
return HttpResponse(template.render(context))
def detail(request,poll_id):
return HttpResponse("You're looking at poll %s."%poll_id)
def results(request,poll_id):
return HttpResponse("you're looking at the results of poll %s."%poll_id)
def vote(request,poll_id):
return HttpResponse("you're voting on poll %s."%poll_id)
如果在浏览器输入http://localhost:8000/polls/34/,django是怎么处理的呢
1、在mysite/url.py中先找到匹配的 '^polls/'
2、把匹配的url去掉,把剩余 ”34/" 传递给poll下面的url.py
3、在poll/url.py中找到匹配的项 r'^(?P<poll_id>d+)/$' 执行相应的view : detail()
在执行detail()的时候相当于
detail(request=<HttpRequest object>,poll_id='34')
那么这个34是如何对应到poll_id呢
在上面的第三步中,r'^(?P<poll_id>d+)/$' 会把匹配出来的内容 34 和你们的正则组对应起来,poll_id对应匹配到的34
模板
上面看到返回的内容的格式是直接写到index里面的,人们常用的要数据的逻辑处理和呈现分开就是这里的情况
这就用到django的模板功能了
建立文件:polls/templates/index.html
{% if latest_poll_list %}
<ul>
{% for poll in latest_poll_list %}
<li><a href="/polls/{{poll.id}}/">{{poll.question}}</a></li>
{%endfor%}
</ul>
{%else%}
<p>No polls are avaliable.</p>
{%endif%}
现在再修改index函数
from django.http import HttpResponse
from django.template import Context,loader
from polls.models import Poll
def index(request):
latest_poll_List=Poll.objects.order_by('-pub_date')[:5]
template=loader.get_template('index.html')
context=Context({'latest_poll_list':latest_poll_list,})
return HttpResponse(template.render(context))
大概意思就是 先加载一个模板,设置一个字典数据,再用render方法把模板中和字典对应的变量用字典中的值处理
具体模板的用法可以看另一篇的专门介绍