【问题标题】:How to replace HttpResponseRedirect with redirect in Django?如何在 Django 中用重定向替换 HttpResponseRedirect?
【发布时间】:2021-04-06 18:01:54
【问题描述】:

我有以下urls.py

urlpatterns = [
...
        path('polls/<int:pk>/', views.DetailsView.as_view(), name='detail'),
        path('polls/<int:pk>/results/', views.ResultsView.as_view(), name='results'),
        path('polls/<int:week_id>/vote/', views.vote, name='vote'),
]

在我看来,我有以下vote 观点:

def vote(request, week_id):
    week = Week.objects.get(pk=week_id)
    try:
        selected_choice = week.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
        return render(request, 'weeklydesert/detail.html', {
            'week': week,
            'error_message': "You didn't select a choice.",
        })
    else:
        selected_choice.votes += 1
        selected_choice.save()
    
        # How to update this to redirect? 
        return HttpResponseRedirect(reverse('results', args=(week.id,)))

我正在尝试更新 HttpResponseRedirect 以简单地使用 redirect 函数,但我无法传递正确的参数。

重定向应该导致类似:polls/1/results/

有什么建议吗?

【问题讨论】:

    标签: python django redirect


    【解决方案1】:

    您可以使用:

    from django.shortcuts import redirect
    
    def vote(request, week_id):
        # …
        return redirect('results', week_id)

    因此您不使用args=(some iterable),而是使用位置参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 2011-08-06
      • 2020-06-27
      • 2012-10-29
      • 2021-01-28
      • 2021-02-24
      • 2011-08-14
      相关资源
      最近更新 更多