Django перенаправить в другой вид с контекстом - PullRequest
0 голосов
/ 03 июля 2018

У меня есть это на мой взгляд

def foo(request):

    context['bar'] = 'FooBar'

    return redirect('app:view')

есть ли способ включить это context['bar'], когда я перенаправлю на 'app:view'? Мое последнее средство и альтернатива - использовать render(), однако я не хочу снова определять все переменные контекста. Есть ли другой подход к этому?

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Я бы использовал переменные сеанса для передачи некоторого контекста через перенаправление. Это единственный способ сделать это, не передавая их как часть URL, и это рекомендуемая опция django.

def foo(request):
    request.session['bar'] = 'FooBar'
    return redirect('app:view')

#jinja
{{ request.session.bar }}

Была указана потенциальная ловушка, тогда как переменная сеанса неправильно используется в будущем запросе, поскольку она сохраняется в течение всего сеанса. Если дело обстоит именно так, вы можете довольно легко обойти эту проблему в будущем, в ситуации, которую можно использовать снова, добавив.

if 'bar' in request.session:
    del request.session['bar']
0 голосов
/ 03 июля 2018

вам нужно использовать HttpResponseRedirect вместо

from django.http import HttpResponseRedirect
return HttpResponseRedirect(reverse('app:view', kwargs={'bar':FooBar}))
0 голосов
/ 03 июля 2018

В Django Вы не можете передавать параметры с перенаправлением. Ваша единственная ставка - передать их как часть URL.

def foo(request):

    context['bar'] = 'FooBar'

    redirect(reverse('app:view', kwargs={ 'bar': FooBar }))

в вашем html вы можете получить их по URL.

...