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.

