【问题标题】:invalid literal for int() with base 10: 'on' Python-Django基数为 10 的 int() 的无效文字:'on' Python-Django
【发布时间】:2012-07-08 09:37:50
【问题描述】:

我正在从官方 django 教程中学习 django。当我从表单中投票时,我收到了这个错误。这可能是由于views.py下的投票功能引起的

这是我的views.py/投票功能:

def vote(request,poll_id):
    p=get_object_or_404(Poll, pk=poll_id)
    try:
            selected_choice = p.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
            return render_to_response('polls/detail.html', {'poll':p,
                                                            'error_message' : "didint select anything ",}, context_instance= RequestContext(request))

    else:
            selected_choice.votes += 1
            selected_choice.save()
            return HttpResponseRedirect(reverse('polls.views.results', args=(p.id,)))

这是错误消息屏幕:

**ValueError at /polls/2/vote/

以 10 为底的 int() 的无效文字:'on'**

请求方法:POST 请求网址:127.0.0.1:8000/polls/2/vote/

Django 版本:1.4 异常类型:ValueError 异常值: 基数为 10 的 int() 的无效文字:“on”异常 位置:/usr/local/lib/python2.7/dist-packages/django/db/models/fields/init.py 在 get_prep_value 中,第 537 行

这是我的投票/urls.py:

from django.conf.urls import patterns, include, url

urlpatterns = patterns('polls.views',

    url(r'^$', 'index'),
    url(r'^(?P<poll_id>\d+)/$','detail'),
    url(r'^(?P<poll_id>\d+)/results/$','results'),
    url(r'^(?P<poll_id>\d+)/vote/$','vote'),

)

这里是 project/urls.py :

from django.conf.urls import patterns, include, url

urlpatterns = patterns('polls.views',

    url(r'^$', 'index'),
    url(r'^(?P<poll_id>\d+)/$','detail'),
    url(r'^(?P<poll_id>\d+)/results/$','results'),
    url(r'^(?P<poll_id>\d+)/vote/$','vote'),

)

【问题讨论】:

  • 请贴出错误信息的全文。
  • 我解决了这个问题。我忘记了 detail.html 中包含我的 post 方法的单引号。
  • 您是如何准确解决这个问题的?我从第 4 部分复制并粘贴了整个教程,但仍然出现此错误?
  • 没关系,我终于想通了。我的 urls.py 使投票返回 1/vote/ 而不仅仅是“1”。当然,如果数字应该是整数,那是行不通的。

标签: python django-views


【解决方案1】:

当您尝试将字符串转换为整数时,您会收到此错误,但字符串实际上不包含任何数字:

number = int(string)

从您的代码中,我在三个地方看到了整数的使用和可能的转换。当p=get_object_or_404(Poll, pk=poll_id) 时,我们假设您已正确地将整数作为 poll_id 传递。您能否发布您正在使用的与此视图关联的 urlpattern 和示例 URL?

您还假设request.POST['choice'] 将是一个整数并且可以这样转换。您没有捕获与此相关的异常,因此您需要检查此条目的值是什么。我会为此部分添加一些其他检查:

if request.method=="POST":
    choice = request.POST.get('choice', None)
    if choice is not None:
        selected_choice = p.choice_set.get(pk=choice)
...

这两个最突出。

请发布您的 urlpattern 和更多您收到的错误消息(例如哪个特定行引发了您的异常)。

【讨论】:

  • 谢谢。现在我要检查我的 urls.py 并再次回到这里。
  • 你不能有一个非整数作为 slug 吗?
【解决方案2】:

是的,我遇到了同样的错误,@cianof 解释的问题出在模板 polls/detail.html 和其他模板中。当您粘贴教程中的代码并且您的编辑器中有 80 个字符的边距时会发生错误。

<input type="radio" name="choice" id="choice {{ forloop.counter }}" value="{{
choice.id }}" />

这不起作用,因为choice.id 靠近大括号{{choice.id }},您应该始终在:{{ choice.id }} 之间留一个空格

关于@garromark 发布的选角答案,我无话可说,我是 Python 和 Django 编码的新手。

【讨论】:

    【解决方案3】:

    我也有这个错误。

    我的情况是,我的表单模板中有错字。仔细检查投票详情模板(“polls/detail.html”)是否有错别字。

    【讨论】:

    • 是的,我的detail.html 也有错字(我用的是values 而不是value
    • 我有价值而不是价值!
    【解决方案4】:

    我也发生了同样的错误。我发现出了什么问题,原来这只是一些小细节: 首先,在我的 'polls/detail.html' 模板中,有一个输入:

    &lt;input type="radio" name="choice" id="choice {{forloop.counter}}" value="{{choice.id}}"/&gt; 我之前有{{choice_id}},这就是它没有获得价值的原因。

    其次,另一个错误说我的'polls/result.html'没有找到,然后我进入这个模板我发现了一个愚蠢的错误:

    &lt;a href="{% url 'polls:detail' question.id %}"&gt;Vote again?&lt;/a&gt;

    在标签里面,我有'polls.detail',难怪找不到模板。 ;)

    【讨论】:

      【解决方案5】:

      我收到了类似的错误。问题隐藏在这里:

      def results(request, question_id):
          question = get_object_or_404(Question, pk=question_id)
          return render(request, 'polls/results.html', {'question: question'})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-04
        • 2023-03-09
        相关资源
        最近更新 更多