投票系统四

投票系统四:前台页面

现在已经可以在后台管理投票了,现在就差怎么在前台显示和如何投票了
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方法把模板中和字典对应的变量用字典中的值处理
具体模板的用法可以看另一篇的专门介绍

posted @ 2016-07-18 19:13  夏日花开  阅读(142)  评论(0编辑  收藏  举报