1

私はdjango(およびプログラミング全般)の完全な初心者です。djangoPollsチュートリアルを試しましたが、すべてうまくいきましたが、最小限の投票ボタンを機能させようとしています。基本的に私は2つの列を持つデータベースをセットアップしました、私のようにmodels.py見えます

from django.db import models


class Imgurl(models.Model):

    urlvar = models.URLField(max_length=200)# a URL linking to an image
    urlvote = models.IntegerField(default=0)# my intended vote count

    def __unicode__(self):
        return self.urlvar

画像のURLをコピーして貼り付けることができる入力ボックスを作成しました。この画像は別のページに表示されます(これは正常に機能します)。私が欲しいのは、表示された各画像の横に投票ボタンを配置することです。ここで、ユーザーはボタンをクリックでき(送信ボタンを使用しようとしています)、dbで投票数が増えます(新しいページにリダイレクトされません)。 、または何か空想)。

これは些細な質問だと思います。私はPOSTdjangoの基本とデータベース処理を学ぼうとしています(また、djangobookの関連する章を読んだことがあります...多分私は少し遅いですか?)

私の意見はこのように見えます

def urlvotes(request):

    if request.method=='POST':
        if 'voteup' in request.POST:
            v=Imgurl(forloop.counter)
            v.urlvote +=1
        else:
            pass
        votetotal=v.urlvote # attempt to give the template some kind of context
    return render_to_response('display.html', {'votetotal':votetotal}, context_instance=RequestContext(request))

私のテンプレートは次のようになります。

{% extends "base.html" %}

{% block head %}Image display{% endblock %}
{% block content1 %}

<a href="http://127.0.0.1:8000/home/">Home</a>
{% if links %}
        <ul>
        {% for link in links %}
            <li><img src="{{ link }}"></li>

            <li><form action="{% url urlvotes %}" method="post"> 
            {% csrf_token %}
            <input type="submit" name="voteup" value='vote'/></p>
            <p>{{votetotal}}</p>
            </form></li>

        {% endfor %}

        </ul>
{% else %}
<p>No uploads.</p>
{% endif %}
{% endblock %}

これをそのまま実行すると、csrf検証に失敗したというエラーが表示されます

どんな助けでも大歓迎です

4

1 に答える 1

0

ビューに@csrf_protectを追加してみてください

@csrf_protect
def urlvotes(request):

    if request.method=='POST':
        if 'voteup' in request.POST:
            v=Imgurl(forloop.counter)
            v.urlvote +=1
    else:
        pass
    votetotal=v.urlvote # attempt to give the template some kind of context
    return render_to_response('display.html', {'votetotal':votetotal}, context_instance=RequestContext(request))
于 2012-10-05T14:54:03.487 に答える