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.

Reply via email to