Django возвращает None вместо ответа HTTP - PullRequest
0 голосов
/ 17 апреля 2020

ОК, я, наверное, все делаю неправильно! Я пытаюсь запустить функцию в представлении, которое вызывает другое представление. Кажется, это передает мой запрос в следующую функцию как метод POST перед загрузкой формы из второй функции.

my views.py

''' This section of hte code seems to function correctly '''
@login_required()
def joinLeague(request):
    if request.method == 'POST':
        league = JoinLeagueQueue(user=request.user)

        form = JoinLeagueForm(instance=league, data=request.POST)
        if form.is_valid():
            form.save()
            context = int(league.id) # displays id of model, JoinLeagueQueue
            return HttpResponseRedirect(confirmLeague(request, context))

    else:
        form = JoinLeagueForm()
        context = {'form':form}
    return render(request, 'userteams/joinleagueform.html', context)

Этот раздел файла представлений не является работает правильно. похоже, что он запускает запрос POST без отображения запроса GET с формой.

@login_required()
def confirmLeague(request, league):
    # gets ID of application to join league
    joinleagueid=JoinLeagueQueue.objects.get(id=league) 

    pin = joinleagueid.pin # gets pin from application
    user = joinleagueid.user # get user from application
    leagueinquestion=League.objects.get(leaguePin=pin) # gets the league record for applied league
    manager=leagueinquestion.leagueManager # Gets the league manager for league applied for
    leaguename=leagueinquestion.leagueName # Gets the league name for league applied for
    if request.method == 'POST':
        if 'accept' in request.POST:
            LeaguesJoinedTo.objects.create(
                leaguePin = pin,
                playerjoined = user,
            )
            return redirect('punterDashboard')# user homepage
        else:
            print("Error in POST request")
    else:
        context = {'leaguename':leaguename, 'pin':pin, 'manager':manager}
        return render(request, 'userteams/confirmleague.html', context)

Теперь я получаю сообщение об ошибке «Страница не найдена» (404) Метод запроса: URL-адрес запроса GET: http://127.0.0.1: 8000 / userteams / None Используя URLconf, определенный в fanfoo_proj.urls, Django пробовал эти шаблоны URL в следующем порядке:

... im пропуская список шаблонов. 10. userteams / verifyLeague [name = 'verifyLeague']

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020
def joinLeague(request):
    if request.method == 'POST':
        league = JoinLeagueQueue(user=request.user)

        form = JoinLeagueForm(instance=league, data=request.POST)
        if form.is_valid():
            form.save()
            context = league.id

            return HttpResponseRedirect( reverse("your_confirmLeague_url",kwargs={'league':context}) )
    else:
        form = JoinLeagueForm()
        context = {'form':form}
    return render(request, 'userteams/joinleagueform.html', context)


def confirmLeague(request, league):
    league = get_object_or_404(JoinLeagueQueue, pk=league)
    pin = league.pin
    if request.method == 'POST':
        if 'accept' in request.POST: # This refers to the action from my form which is waiting for a button press in a html form.
            LeaguesJoinedTo.objects.create(
                leaguePin = pin,
                playerjoined = request.user.id,
            )

            return redirect('punterDashboard')

    else:
        context = {'league':league}
        return render(request, 'userteams/confirmleague.html', context)
0 голосов
/ 17 апреля 2020

Хорошо, я думаю, что лучшим способом будет HttpRedirect для второго представления:

return confirmLeague(request, context)

должно измениться на что-то вроде:

return redirect(confirmLeague,args=league)

django do c на urlresolvers: https://docs.djangoproject.com/en/3.0/topics/http/shortcuts/#redirect

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...