`

Django写的投票系统4(转)

 
阅读更多

原文地址:http://www.cnblogs.com/djangochina/archive/2013/06/04/3114269.html

 

 

现在已经可以在后台管理投票了,现在就差怎么在前台显示和如何投票了
1、index:首先第一个要有首页,用来显示所有的投票
2、detail:详细信息页面,用来显示一个投票及相应的选项
3、results:结果页面,用来查看一个投票的结果
以及一个投票的操作

在polls/views.py 页面添加如下代码

from django.http import HttpResponse
def index(request):
    return HttpResponse("Hello, world. You're 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配置里面。

复制代码
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', include(admin.site.urls)),
)
复制代码

 

打开http://localhost:8000/polls/ 测试一下看看。

如果要想往views里面的方法传递参数要怎么做呢
看看下面的
修改poll/url.py

复制代码
from django.conf.urls import patterns, url
from polls import views
urlpatterns = patterns('',
    # ex: /polls/
    url(r'^$', views.index, name='index'),
    # ex: /polls/5/
    url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
    # ex: /polls/5/results/
    url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),
    # ex: /polls/5/vote/
    url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'),
)
复制代码

 

在polls/views.py添加

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 view仅仅是测试的,没有做具体的功能。

复制代码
from django.http import HttpResponse
from polls.models import Poll
def index(request):
    latest_poll_list = Poll.objects.order_by('-pub_date')[:5]
    output = ', '.join([p.question for p in latest_poll_list])
    return HttpResponse(output)
复制代码

 

上面的意思是取最新的5个记录,以字符串的形式返回,并用“,”分开

模板

上面看到返回的内容的格式是直接写到index里面的,人们常用的要数据的逻辑处理和呈现分开就是这里的情况
这就用到django的模板功能了
建立文件:polls/templates/polls/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 available.</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('polls/index.html')
    context = Context({
        'latest_poll_list': latest_poll_list,
    })
    return HttpResponse(template.render(context))
复制代码

 

大概意思就是 先加载一个模板,设置一个字典数据,再用render方法把模板中和字典对应的变量用字典中的值处理

因为django模板功能经常使用,所以提供了一种简化的代码写法。

复制代码
from django.shortcuts import render
from polls.models import Poll
def index(request):
    latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
    context = {'latest_poll_list': latest_poll_list}
    return render(request, 'polls/index.html', context)
复制代码

 

和上面是一样的意思

404错误
这个错误我们很常见,当对应的页面不存在的时候就会出来

复制代码
from django.http import Http404
# ...
def detail(request, poll_id):
    try:
        poll = Poll.objects.get(pk=poll_id)
    except Poll.DoesNotExist:
        raise Http404
    return render(request, 'polls/detail.html', {'poll': poll})
复制代码

 

这里还没有说到polls/detail.html模板,所以先在建立这个文件,简单的写入如下代码,先不让他出错

{{ poll }}

 

如果在poll中对应的poll_id不存在的话就引发404错误。

像这种情况会经常发生,所以django也提供了简单的写法

  1. from django.shortcuts import render, get_object_or_404
  2. # ...
  3. def detail(request, poll_id):
  4. poll = get_object_or_404(Poll, pk=poll_id)
  5. return render(request, 'polls/detail.html', {'poll': poll})
复制代码

如果是要处理多个对象需要用这个:

get_list_or_404()

 

get_object_or_404

 

是一样的功能,只是处理对象不同

如果发现错误了会在你的项目的url配置文件中找 handler404 对应的view来显示,如果找不到的话会用django自己的viewdjango.views.defaults.page_not_found()来显示,对于404文件也可以用模板来设置
在项目模板中 mysite/templates 中添加404.html django会自动找到这个模板,并且显示出来。

当然只有在DEBUG为false的情况下才会显示出现,否则会显示出一个具体的调试错误信息,可在settings.py文件里面设置


现在继续模板,修改polls/detail.html如下

复制代码
<h1>{{ poll.question }}</h1>
<ul>
{% for choice in poll.choice_set.all %}
    <li>{{ choice.choice_text }}</li>
{% endfor %}
</ul>
复制代码

 

{{ poll.question }} :django先以字典的形式在poll对象中查找question ,如果找不能以属性的方式来查找,因为在这个例子里question 就是poll的属性,所以在这里就找到了,如果还找不到的话就以列表索引的方式来查找。

poll.choice_set.all:这里其实执行的是poll.choice_set.all()方法,会返回 Choice 的迭代对象

  1. 模板中的url引用
复制代码

在上面代码中

<li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li>

 

里面的url连接是直接写在模板里面的,如果poll应用所在的位置改变了,就得需要在所有用到的模板里面都修改修改。所以django有一种简单的方法来实现。
还记得在poll/urls.py里设置的url吧。
没错,注意在设置url的时候最后面有个 name 属性,这个属性就是来给每个url一个名字,可以在模板里面直接用这个名字来代替url

<li><a href="{% url 'detail' poll.id %}">{{ poll.question }}</a></li>

 

注意:
如果设置{% url 'detail' poll.id %}不正常,而{% url detail poll.id %} 正常的话,说明你用的django版本<1.5,需要在模板的最上面添加:

{% load url from future %}

 

在poll.urls.py里面是如下的定义

  1. # the 'name' value as called by the {% url %} template tag
  2. url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
复制代码

如果以后想要在其他地方应用,或者不同的目录结果中,只需要更改此处就可以了,不用在每个模板里面更改,是不是很简单

# added the word 'specifics'
url(r'^specifics/(?P<poll_id>\d+)/$', views.detail, name='detail'),

 

url命名空间
假如现在有两个应用,每个应用下面的urls.py里面都有一个detail 定义的url,这个时候django就没法判断要用哪个了,所以就出来了个命名空间。用来区别不同的url

复制代码
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls', namespace="polls")),
    url(r'^admin/', include(admin.site.urls)),
)
复制代码

 

再修改下模板文件

<li><a href="{% url 'detail' poll.id %}">{{ poll.question }}</a></li>

 

添加命名空间

<li><a href="{% url 'polls:detail' poll.id %}">{{ poll.question }}</a></li>
分享到:
评论

相关推荐

    python开发基于Django的投票系统源代码.zip

    python开发基于Django的投票系统源代码python开发基于Django的投票系统源代码python开发基于Django的投票系统源代码python开发基于Django的投票系统源代码python开发基于Django的投票系统源代码python开发基于Django...

    基于python框架django开发在线投票系统

    最新技术python web使用django框架做的投票系统 运行环境 django+python+sublime text3+sqlite 项目技术(必填) django+python+sublime text3+navicat Premium+html+jquery 数据库文件 放于mysite根目录下的db.sqlite...

    python开发基于Django的投票系统源码(高分项目).zip

    python开发基于Django的投票系统源码(高分项目).zip个人经导师指导并认可通过的高分毕业设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大...

    基于python+Django框架的调查投票系统源码(课程设计).zip

    基于python+Django框架的调查投票系统源码(课程设计).zip 基于python+Django框架的调查投票系统源码(课程设计).zip 基于python+Django框架的调查投票系统源码(课程设计).zip 【备注】 该项目代码主要针对计算机、...

    python+django+投票系统+源码+完整

    在本项目中,我们讨论的是一个基于Python的Django框架构建的投票系统。这个系统提供了完整的源码,适合初学者和开发者深入理解Django的工作原理以及如何构建动态Web应用。让我们详细探讨一下其中涉及的关键知识点。 ...

    基于python框架django开发的在线投票系统源码+文档说明

    基于python框架django开发的在线投票系统源码+文档说明基于python框架django开发的在线投票系统源码+文档说明基于python框架django开发的在线投票系统源码+文档说明基于python框架django开发的在线投票系统源码+文档...

    Django框架投票系统及图表功能及源码+可做作业毕设等参考

    Django框架投票系统及图表功能及源码 项目简介 这是一个使用Python Django框架开发的投票系统,使用JavaScript图表API构建投票结果的交互式图表。它提供了登录、注册和对管理员添加的投票进行投票的功能。 系统...

    python开发基于Django的投票系统源码+项目说明.zip

    在本项目中,我们主要探讨的是使用Python的Django框架开发一个投票系统。Django是一个高级的、开源的Web框架,它遵循模型-视图-控制器(MVC)的设计模式,能够快速高效地构建功能丰富的Web应用。这个压缩包包含了...

    利用django进行投票系统的基础程序设计

    在本教程中,我们将深入探讨如何使用Python的Django框架构建一个基础的投票系统。Django是一个强大且灵活的Web开发框架,它提供了许多内置功能,使得开发过程更加高效。让我们一起逐步了解如何实现这个投票系统。 ...

    基于Django框架的调查投票系统python实现源码.zip

    基于Django框架的调查投票系统python实现源码.zip基于Django框架的调查投票系统python实现源码.zip基于Django框架的调查投票系统python实现源码.zip基于Django框架的调查投票系统python实现源码.zip基于Django框架的...

    基于Python与Django的投票系统学习型设计源码

    该项目是一款基于Python和Django框架的投票系统学习型设计源码,共计32个文件,涵盖12个pyc文件、11个Python源文件、4个HTML文件、1个CSS文件以及其他相关文件。该源码旨在帮助开发者学习Django框架,特别适用于那些...

    Python毕业设计-基于Django的投票系统的设计与实现+使用说明+全部资料(优秀项目).zip

    Python毕业设计-基于Django的投票系统的设计与实现+使用说明+全部资料(优秀项目).zipPython毕业设计-基于Django的投票系统的设计与实现+使用说明+全部资料(优秀项目).zip 【备注】 1、该资源内项目代码都经过...

    python django web版投票系统

    【Python Django Web版投票系统详解】 在Web开发领域,Python的Django框架因其高效、安全和易用性而备受推崇。本项目是一个基于Django框架构建的Web版投票系统,旨在提供一个用户友好的界面,让用户参与投票并确保...

    基于django的投票系统.zip

    django Django是一个高级的Python Web框架,可以快速开发安全和可维护的网站。由经验丰富的开发者构建,Django负责处理网站开发中麻烦的部分,可以专注于编写...4. URL 设计; 5. 设计者友好的模板语言; 6. 缓存系统。

    基于Django框架的简易的调查投票系统python源码.zip

    【资源说明】基于Django框架的简易的调查投票系统python源码.zip基于Django框架的简易的调查投票系统python源码.zip基于Django框架的简易的调查投票系统python源码.zip基于Django框架的简易的调查投票系统python源码...

    基于Django的多用户登陆注册投票系统

    在线投票系统 1.客户端(网页形式) a.登录、注册密码(需要有学号验证功能:注册学号和管理员导入学号需进行验证) b.投票功能(单选) 2.服务端(网页形式) a.管理员登录认证 b.学生信息导入(文件形式导入,内容...

    毕业设计:Python基于Django框架课堂投票系统的设计与实现(源码 + 数据库 + 说明文档)

    毕业设计:Python基于Django框架课堂投票系统的设计与实现(源码 + 数据库 + 说明文档) 第2章 需求分析 6 2.1可行性分析 6 1.4.1硬件可行性 7 1.4.2技术可行性 7 1.4.3安全可行性 7 1.4.4经济可行性 7 2.2 系统需求...

    Python在线投票系统基于django+bootstrap的在线投票系统源代码+数据库

    标题中的“Python在线投票系统基于django+bootstrap的在线投票系统源代码+数据库”指的是一个使用Python编程语言,结合Django框架和Bootstrap前端UI库开发的在线投票应用。这个系统不仅包含了源代码,还附带了数据库...

Global site tag (gtag.js) - Google Analytics