在下一个视图中了解如何使用HttpRedirect调用视图

时间:2017-02-23 09:19:34

标签: python django redirect

我在django中有两个视图:一个用于加载页面,另一个用于保存表单。我已将两者分开,因此我可以保持在同一页面上而不会刷新页面导致重新提交。

保存表单的创建视图会重定向回使用maximumSize加载页面的视图。

在加载页面视图中,是否可以获取创建视图是否使用重定向调用视图?

所以:

HttpResponseRedirect

然后保存表单的视图:

def holiday(request, value=None, year=None, month=None):
    if request.method == "GET":
        # set some variables for the view
        year = something
        month = something_else
    else:
        # get if the view was executed from a redirect
        # set year and month to be something2 and something_else2

    # calendar

    holidayform = HolidayForm(request.POST or None, request.FILES or None)
    context = {
        "holidayform": holidayform,
        "calendar": mark_safe(cal),
        "year": year,
        "month": month,
    }
    return render(request, "tande/calendar.html", context)

1 个答案:

答案 0 :(得分:2)

HttpResponseRedirect将逐字地重定向用户。基本上,就好像用户在浏览器中输入了URL并按下了回车键。这意味着过去请求中的某些信息无法使用。

https://docs.djangoproject.com/en/1.10/ref/request-response/#httpresponse-subclasses

您可以通过GET参数传递标志。它可以做到这一点:

HttpResponseRedirect(reverse("tande:holiday") + '?redirect=True')

然后在form_view中阅读GET参数:

if request.GET.get('redirect', None):
    do_something()

如果用户故意将该GET参数添加到URL,您只需要考虑会发生什么。他可以假装结果。如果您的意图是显示消息,那么它就不会成为问题。