![](/img/trans.png)
[英]Not able to redirect to another page after clicking on submit button 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.