• 投票系统四


    投票系统四:前台页面

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

  • 相关阅读:
    Linux下常用的3种软件安装方式
    解决navicate 连接mysql数据库中文乱码的问题
    Lua 遍历Linux目录下的文件夹
    ubuntu 更改源
    ubuntu 下安装配置LAMP
    简述configure、pkg-config、pkg_config_path三者的关系
    linux 下库的深入调研
    Linux下的库操作工具-nm、ar、ldd、ldconfig和ld.so
    linux命令strings
    c++隐式类型转换和explicit
  • 原文地址:https://www.cnblogs.com/hanfei-1005/p/5682359.html
Copyright © 2020-2023  润新知