【问题标题】:Django Calling a View from a View doesn't change URLDjango 从视图调用视图不会更改 URL
【发布时间】:2022-01-03 18:36:13
【问题描述】:

我有两种观点。一个叫做gameReportRoster,另一个叫做gameReportStats。

视图的基本流程如下:

gameReportRoster 从另一个视图接收 PK。然后,它会呈现一些表单并处理一些数据,以获取参与游戏的玩家的列表,以及被添加到名单中的玩家。

当用户点击提交时,一些业务逻辑完成,一些数据存储到一个临时模型中。此时,我们需要调用 gameReportStats 来渲染下一组表单。在调用 gameReportStats 时,我们需要传递一个名为 game 的变量。

我面临的问题是,当我们调用 gameReportStats 时,URL 没有改变。所以 Post Request 正在 gameReportRoster 中处理,尽管我们现在应该在 gameReportStats 中。

def gameReportRoster(request, pk):

@login_required(login_url="/login/")
def gameReportRoster(request, pk):
    **QUERIES AND FORM RENDERING HERE**

    if request.method == 'POST':
        if 'submitRoster' in request.POST:
            print('submitRoster Was Pressed')

            homePlayedList = request.POST.getlist('homePlayed')
            awayPlayedList = request.POST.getlist('awayPlayed')

            formsetHome = PlayerFormSet(data=request.POST, prefix='home')
            formsetAway = PlayerFormSet(request.POST, prefix='away')

            **OMMITED FORM PROCESSING DONE HERE FOR READABILITY**

            tempGameResult = TempGameResults(game=game)
            tempGameResult.save()

            tempGameResult.homePlayers.set(homePlayersPlayed)
            tempGameResult.awayPlayers.set(awayPlayersPlayed)

            return gameReportStats(request, game)

    **MORE QUERIES AND FORM RENDERING HERE**

    return render(request, "home/game-report-roster.html", context)

def gameReportStats(request, game):

@login_required(login_url="/login/")
def gameReportStats(request, game):
    tempGameResult = TempGameResults.objects.get(game=game)
    # teams = Team.objects.filter(id__in=teamList)
    homeTeam = Team.objects.get(id=game.homeTeam_id)
    awayTeam = Team.objects.get(id=game.awayTeam_id)
    teamList = [homeTeam.id, awayTeam.id]
    teams = Team.objects.filter(id__in=teamList)
    homePlayersPlayed = Player.objects.filter(id__in=tempGameResult.homePlayers.values_list('id'))
    awayPlayersPlayed = Player.objects.filter(id__in=tempGameResult.awayPlayers.values_list('id'))

    gameResultForm = GameResultForm(teams=teams)

    formsetGoalHome = GoalFormSet(
        queryset=Goal.objects.none(),
        form_kwargs={'players': homePlayersPlayed},
        prefix='goalHome'
    )
    formsetGoalAway = GoalFormSet(
        queryset=Goal.objects.none(),
        form_kwargs={'players': awayPlayersPlayed},
        prefix='goalAway'
    )
    formsetPenaltyHome = PenaltyFormSet(
        queryset=Penalty.objects.none(),
        form_kwargs={'players': homePlayersPlayed},
        prefix='penaltyHome'
    )
    formsetPenaltyAway = PenaltyFormSet(
        queryset=Penalty.objects.none(),
        form_kwargs={'players': awayPlayersPlayed},
        prefix='penaltyAway'
    )

    context = {
        'formsetGoalHome': formsetGoalHome,
        'formsetPenaltyHome': formsetPenaltyHome,
        'formsetGoalAway': formsetGoalAway,
        'formsetPenaltyAway': formsetPenaltyAway,
        'gameResultForm': gameResultForm,
        'homeTeam': homeTeam,
        'awayTeam': awayTeam,
    }


    ** THIS IF NEVER GETS CALLED **
    if request.method == 'POST':
        print('Test')
    ** TEMPLATE GETS PROPERLY RENDERED, BUT URL NEVER CHANGES **
    return render(request, "home/game-report-stats.html", context)

urls.py

path('game-report-roster/<str:pk>', views.gameReportRoster, name="gameReportRoster"),
path('game-report-stats/', views.gameReportStats, name="gameReportStats"),

实际的 URL 是什么样子的

http://127.0.0.1:8000/game-report-roster/fc4cd6db-d7f9-43b3-aa80-f9d4abfff0e5

【问题讨论】:

    标签: python django


    【解决方案1】:

    也许不是

    return gameReportStats(request, game)

    尝试:

    return redirect('myappname:your_name_in_urls.py', game)

    【讨论】:

    • 非常感谢,这对您有帮助。只需要对此进行视图修改,因此如果有人遇到此问题,我必须执行以下操作。 return redirect('gameReportStats', game.id) path('game-report-stats/', views.gameReportStats, name="gameReportStats"),
    猜你喜欢
    • 2018-02-20
    • 2016-04-11
    • 1970-01-01
    • 2014-05-06
    • 2021-12-20
    • 2018-07-12
    • 2012-01-26
    • 2017-04-14
    • 1970-01-01
    相关资源
    最近更新 更多