2017-02-23 42 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. Он может подделать результат. Если ваше намерение отображает сообщение, это не будет проблемой.

Смежные вопросы