2016-06-04 2 views
0

В одном определении мой взгляд, я делаю этоHttpResponseRedirect с реверсом не проходящие параметры

return HttpResponseRedirect(reverse('home'),{"fail":"true"}) 

затем пункт назначения, принимающий определение в представлении делает это

def Validate(request): 
    rslt = request.GET.get("fail", "False") #--->fail is always false 
    .... 
    .... 

В вышеприведенном переменной потерпеть неудачу всегда false. Любые предложения о том, почему я всегда получаю ложную информацию. Почему мой новый параметр не передается?

+0

Зачем так обозначено? Мне не хватает деталей? – Rajeshwar

ответ

0

Это потому, что вы просите fail от GET, но вы ничего не пропускаете в GET.

вам нужно:

return HttpResponseRedirect('%s?fail=%s' % (reverse('home'), True)) 

, то вы можете поймать его люблю:

request.GET.get("fail", False) 

DonT неправильное использование Booleans! ;)

+0

wait Я смущен. Разве я не прохожу {"fail": "true"} в моем первом заявлении? У меня создалось впечатление, что такие параметры, как 'home? Key = Val', такие же, как перенаправление HttpResponseRedirect (« home », {« key »:« val »})? – Rajeshwar

+0

Если «fail» не находится в get, это будет bool, иначе строка. Вы должны добавить логику 'cast/eval' – schwobaseggl

+0

@Rajeshwar не как GET. Это даже неправильно для позиционных аргументов. Это должно быть 'reverse ('home', kwargs = {" fail ": True})' – doniyor

1

args и kwargs передается в конструктор HttpResponseRedirect

def __init__(self, redirect_to, *args, **kwargs): 
    ... 

не используются для построения QueryDict (получить или пост). Вы инициализируете ответ здесь, а не запрос. Как Doniyor уже заявили, вы в основном должны добавить строку запроса вручную пути возвращаемый reverse():

return HttpResponseRedirect('{to}?{query}'.format(
    to=reverse('home'), 
    query=urllib.urlencode({"fail":"true"}) 
)) 

Это не имеет ничего общего с Джанго, но общее перенаправление HTTP. Вы можете перенаправить запрос только на место (к которому вы можете добавить строку запроса), но вы не можете вмешиваться в сам запрос, например, добавлять POST-данные или заголовки настроек.

+0

Спасибо за отличное объяснение. Это многое проясняет – Rajeshwar

0

Вам нужно указать второй параметр при обратной функции ... как аргументы ... это хорошо работает для меня !!!

return reverse('home', args='true')