簡體   English   中英

嘗試在按鈕提交時調用Django視圖,然后重定向到同一頁面(重新加載)

[英]Trying to call Django view on button submit and redirect to the same page (reloaded)

我試圖調用一個視圖,該視圖在單擊按鈕時將玩家注冊到錦標賽中,在視圖中注冊他們,然后實質上刷新頁面以反映他們的新注冊。 我在這里views.py:

from django.shortcuts import render, redirect
from django.http import HttpResponse

from .models import Tournament, TournamentRegistration


def index(request):
    tournaments = Tournament.objects.order_by("-start_time")
    context = {'tournaments': tournaments}
    return render(request, 'tournaments/index.html', context)


def tournament_detail(request, tourney_id):
    tournament = Tournament.objects.get(pk=tourney_id)
    user = request.user
    player_is_registered = TournamentRegistration.player_is_registered(tourney_id, user.id)
    print(player_is_registered)
    if player_is_registered:
        registered = 'yes'
    else:
        registered = 'no'
    context = {'tournament': tournament, 'player_is_registered': registered}
    return render(request, 'tournaments/tournament_detail.html', context)


def register_for_tournament(request, tourney_id, player_id):
    registration = TournamentRegistration(tournament=tourney_id, player=player_id)
    registration.save()
    return redirect(tournament_detail, tourney_id=tourney_id)

比賽/ urls.py:

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^(?P<tourney_id>[0-9]+)/$', views.tournament_detail, name='tournament_detail'),
    url(r'^(?P<tourney_id>[0-9]+)/(?P<player_id>[0-9]+)/$', views.register_for_tournament, name='tournament_registration'),
]

主要urls.py:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'accounts/', include('accounts.urls')),
    url(r'accounts/', include('django.contrib.auth.urls')),
    url(r'^tournaments/', include('tournaments.urls')),
    url(r'', TemplateView.as_view(template_name='home.html'), name='home'),

]

比賽注冊模板:

  <body>
    <p>User ID: {{ user.id }}</p>
    <p>{{ tournament.name }}</p>
    <p>Start time: {{ tournament.start_time }}</p>
    <p>Registered: {{ player_is_registered }}</p>

    <form action="/tournaments/{{tournament.pk}}/{{user.id}}" method="GET">
      <button type="submit">Register</button>
    </form>

  </body>

我根據在網上找到的示例提出了此代碼。 但是令我沮喪的是,它沒有刷新並顯示與注冊播放器相同的頁面,而是將瀏覽器帶到URL http://127.0.0.1:8000/tournaments/1/1? 被捕獲為“主頁”頁面(主url文件中名稱為“ home”的url頁面)。

我再次查看了比賽詳細信息頁面,以查看它是否注冊了玩家,但沒有注冊。 所以我的目標都沒有實現。 在嘗試通過按鈕調用此視圖並使用新信息重定向到同一頁面時,我做錯了什么?

麻煩是兩方面的。 首先,您沒有在操作URL的末尾添加斜杠:

<form action="/tournaments/{{tournament.pk}}/{{user.id}}/" ..

盡管實際上您應該在這里使用url標記,但它會正確輸出包括反斜杠在內的整個URL:

<form action="{% url 'tournament_registration' tournament.pk user.id %}" ...

其次,您沒有錨定主URL,因此它匹配所有與其他都不匹配的內容。 它應該是:

url(r'^$', TemplateView.as_view(template_name='home.html'), name='home'),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM