Thank you for your reply, but I don't really understand how am i able to make it to the page I want, does it mean I need to write a new function in view and pass in the retrieved answer from user, then do the redirection/ rendering? Could you give me some hints about how the syntax would be, because I am a total newbie in Django and couldn't find much resources about my situation. Thank you!
Gavin Wiener <[email protected]> 於 2020年4月16日週四 下午8:00寫道: > So the "return" inside the inner function won't automatically "trigger". > `redirect` is a shortcut function which constructs a HttpResponseRedirect. > At the moment, you're calling the function, and the HttpResponseRedirect > instance is returned from the function you're not actually doing anything > with it, you're throwing it away. You'd need to either `return verifyGame2` > or save the response `redirect_instance = verifyGame2` and then `return > redirect_instance` > > But your flow in this function seems very odd. Your actions are exactly > the same regardless if it's a GET or POST. Your form's submit should be > POST and not a GET (since you're sending data). In that case; your code > should be looking at the request's method, if it's a GET, then render the > game2.html, if it's a POST, then you need fetch the POST data (the answer) > and do the processing as you've done. > > It's quite unnecessary to have an inner function in this situation. > > Quite a lot to improve on with this FBV. > > On Wednesday, April 15, 2020 at 8:22:35 PM UTC+8, pui hei Li wrote: >> >> I am writing a view that retrieve an answer from game2.html, then check >> the answer; if the answer is correct, the view will redirect user to >> correct.html, if the answer is incorrect, then user will be redirected to >> incorrect.html. >> >> The problem now is after clicking the submit button, user won't be >> redirected. And after clicking the submit button, the url changed from >> localhost:8000/game2 to >> http://localhost:8000/game2/?ans2=4&game2Answer=Submit >> >> It seems the view is not verifying the answer, and it is also redirecting >> user to anywhere. >> >> How do I solve it? >> >> *morse_logs/views.py* >> >> @login_required() >> def game2(request): >> """The Game2 page""" >> if request.user and not request.user.is_anonymous: >> user = request.user >> >> def verifyGame2(val1): >> user_score, created = userScore.objects.get_or_create(user=user) >> >> if val1 == 4: >> # user's score declared in model increase 5points >> # display correct and 5 points added to user >> user_score.score += 5 >> user_score.save() >> return redirect(reverse('morse_logs:incorrect')) >> else: >> # user's score declared in model has no point >> # display incorrect and 0 point added to user >> return redirect(reverse('morse_logs:incorrect')) >> >> >> ans2 = request.GET.get('ans2', '') >> if ans2 == '': >> ans2 = 0 >> >> verifyGame2(int(ans2)) >> >> return render(request, 'morse_logs/game2.html') >> >> >> *morse_logs/game2.html* >> >> {% extends "morse_logs/base.html" %} >> >> {% block content %} >> <title>GAME 2</title> >> <div> >> <h1>GAME 2</h1> >> <h2>2 + 2 = ?</h2> >> <form method="get" > >> <input type="number" id="ans2" name="ans2"/><br><br> >> <input type="submit" name="game2Answer"/> >> </form> >> </div> >> {% endblock content %} >> >> >> *morse_logs/correct.html* >> >> {% extends "morse_logs/base.html" %} >> >> {% block content %} >> <title>Correct!</title> >> <div> >> <h1>Congratulations! Your answer is CORRECT!</h1> >> </div> >> {% endblock content %} >> >> >> *morse_logs/incorrect.html* >> >> {% extends "morse_logs/base.html" %} >> >> {% block content %} >> <title>Inorrect...</title> >> <div> >> <h1>Unfortunately! Your answer is Incorrect!</h1> >> </div> >> {% endblock content %} >> >> >> *morse_logs/urls.py* >> >> from django.urls import path, include >> from morse_logs import views >> >> app_name = 'morse_logs' >> >> urlpatterns = [ >> #The path() function is passed four arguments, two required: route and >> view, and two optional: kwargs, and name. >> # Home Page >> path(r'', views.index, name='index'), >> # Page that shows all topics >> path(r'topics/', views.topics, name='topics'), >> path(r'cipher/', views.cipher, name='cipher'), >> path(r'decipher/', views.decipher, name='decipher'), >> path(r'tutorialIndex/', views.tutorialIndex, name='tutorialIndex'), >> path(r'gameDirectory/', views.gameDirectory, name='gameDirectory'), >> path(r'correct/', views.correct, name='correct'), >> path(r'incorrect/', views.incorrect, name='incorrect'), >> path(r'game1/', views.game1, name='game1'), >> path(r'game2/', views.game2, name='game2'), >> >> ] >> >> -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/django-users/0e1cf17c-a5cf-4e58-b3de-9e243ee8ed3b%40googlegroups.com > <https://groups.google.com/d/msgid/django-users/0e1cf17c-a5cf-4e58-b3de-9e243ee8ed3b%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CADvobnDw9NruM0uF0MXQBPO%2BjkT5VSjuxYB38SjjPmth_qbeMA%40mail.gmail.com.

