1

djangoは初めてです

私は投票アプリケーションに取り組んでいます。投票した後も同じページに留まる必要があります

ページを離れずに更新して成功メッセージを表示したいという意味

これが私のview.pyです(二重投票を避けるためにCookieを設定してチェックします):

@render_to('user/books_list.html')  
def vote(request, object_id):
voted=request.session.get('has_voted',[])
books = Book.objects.get(id=object_id);

if object_id in voted:         
    return {
                'object': books,
                'error_message': "You have already voted.",
            }
else:
    books.votes += 1
    books.save()
    request.session['has_voted']=voted+[object_id]
    return locals()

これが私のurls.pyです:

urlpatterns = patterns('user.views',

    url(r'^books/$', 'books_list', name="books_list"),
    url(r'^books/(?P<object_id>\d+)$', 'book_detail', name="book"),
    url(r'^books/vote/(?P<object_id>\d+)$', 'vote', name="vote"),  
)

これが私のテンプレートです:

{% if list_participant %}

{% for book in list_books %}

{{ book.name }} 

    <a href={% url vote book.id %}  >vote</a>

    {{ book.votes }} 

  {% endfor %}

{% endif %}

今のやり方では、books /vote/xにリダイレクトされます。前のページであるbooks/にリダイレクトされます。

どんなアイデアでもよろしくお願いします

4

1 に答える 1

1

解決しました

だから私がしたのは、本を表示する同じビュー内に投票処理を追加し、ifPost条件を使用して投票ボタンがクリックされたことを検出することです

@render_to('user/list_books.html')  
def list_books (request):    
    books_list = Book.objects.all()

  if request.POST:
    voted=request.session.get('has_voted',[])
    p_id=request.POST['id']
    book = Book.objects.get(id=p_id);
    if p_id in voted:         
        return {
                'notvoted': book,
                'error_message': "You have already voted for this book today!",
                'books_list': books_list
                }
    else:
        book.votes += 1
        book.save()

        vote = Vote() 
        vote.book_id = p_id
        vote.ip = request.META.get('REMOTE_ADDR')       
        vote.save()

        request.session['has_voted'] = voted+[p_id]
        request.session.set_expiry(86400)#one day in seconds
        return {
                 'books_list': books_list,
                 'voted' : 1 ,
                 'book' : book
                }
else :
    return {'books_list': books_list}
于 2012-07-23T13:34:23.150 に答える