2017-02-23 81 views
1

我在django中有兩個視圖:一個加載頁面,另一個保存表單。我已經分開了這兩個,所以我可以留在同一頁面上,而不刷新頁面導致重新提交。在下一個視圖中獲取如何使用HttpRedirect調用視圖

保存表單的創建視圖重定向回加載頁面的視圖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) 

然後,節省的形式觀點:

def create_holiday(request): 
    overlapping_dates = False 
    if request.method == "POST": 

     #save the form... or don't 

     return HttpResponseRedirect(reverse("tande:holiday")) 

回答

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。他可以僞造結果。如果你的意圖是顯示一條消息,那麼它不會是一個問題。

相關問題