7

私は公式の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,)))

これはエラーメッセージ画面です:

** / polls / 2/vote/でのValueError

10進数のint()のリテラルが無効です:'on' **

リクエスト方法:POSTリクエストURL: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/ get_prep_valueの537行目のinit.py

そしてここに私のpolls/urls.pyがあります:

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

urlpatterns = pattern('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 = pattern('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'),

)。

4

5 に答える 5

8

文字列を整数にキャストしようとすると、このエラーが発生しますが、文字列には実際には数字が含まれていません。

すなわち

number = int(string)

あなたのコードから、私が整数の使用と可能性のあるキャストを見る3つの場所があります。p=get_object_or_404(Poll, pk=poll_id)あなたがpoll_idとして整数を正しく渡したと仮定しているとき。このビューに関連付けられている使用しているURLパターンとサンプル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)
...

この2つが最も際立っています。

urlpatternと、表示されたエラーメッセージ(例外をスローしている特定の行など)を投稿してください。

于 2012-07-08T23:19:10.997 に答える
4

はい、同じエラーが発生しました。@ 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のcoodingは初めてです。

于 2014-10-01T13:30:53.087 に答える
2

私もこのエラーがありました。

私の場合、フォームテンプレートにタイプミスがありました。投票詳細テンプレート(「polls / detail.html」)にタイプミスがないか再確認してください。

于 2014-04-17T23:24:49.207 に答える
1

同じエラーが発生しました。私は何が間違っているのかを見つけました、それはほんの少しの詳細であることがわかりました:最初に、私の'polls / detail.html'テンプレートに入力があります:

<input type="radio" name="choice" id="choice {{forloop.counter}}" value="{{choice.id}}"/>以前持ってい{{choice_id}}たので、価値がありませんでした。

次に、「polls / result.html」が見つからなかったという別のエラーが表示されたので、このテンプレートにアクセスして、ばかげた間違いを見つけました。

<a href="{% url 'polls:detail' question.id %}">Vote again?</a>

タグの中には「polls.detail」があり、テンプレートが見つからなかったのも不思議ではありません。;)

于 2018-10-17T08:53:17.950 に答える
0

同様のエラーが発生しました。問題はここに隠されていました:

def results(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/results.html', {'question: question'})
于 2016-07-31T10:29:24.590 に答える