Django: Могу ли я перенаправить с вложением данных на другую страницу, которая была создана render_to_response с RequestContext?
У меня уже есть огромный index.html, который рисует из вещей, определенных в моем контроллере индекса. У меня есть другая страница, которая выполняет некоторую обработку, и если она прошла успешно, я хотел бы снова отобразить index.html, но с добавленными данными, позволяющими моему представлению узнать, что статус был успешным. Тем не менее, мне также нужна вся информация context
чтобы показать в представлении, чтобы показать. Без повторения context
в def process(request):
Как правильно передать словарь данных в index.html? Спасибо
def index(request):
context = RequestContext(request)
context['something'] = 'something'
# much much more
return render_to_response('index.html', context)
def process(request):
data['status'] = 'success'
return ??? ('index.html', context, data?)
2 ответа
Извлеките генерацию данных в функцию и вызовите эту функцию из обоих представлений:
def _get_context(request):
context = RequestContext(request)
context['something'] = 'something'
# much much more
return context
def index(request):
return render_to_response('index.html', {}, _get_context(request))
def process(request):
data['status'] = 'success'
return render_to_response('index.html', {'status': 'success'},
_get_context(request))
Примечание: подумайте об использовании render
вместо render_to_response
,
Одним из простых решений может быть добавление некоторых данных в ваш сеанс, а затем перенаправление обратно в представление индекса:
from django.shortcuts import redirect
def index(request):
context = RequestContext(request)
context['something'] = 'something'
# much much more
if 'success' in request.session:
context['success'] = request.session['success']
del(request.session['success'])
return render_to_response('index.html', context)
def process(request):
request.session['status'] = 'success'
return redirect("name-of-index-view")
РЕДАКТИРОВАТЬ ИЗ ОП: В моем случае я хочу, чтобы статус сохранялся только один раз, а не продолжался в течение всего сеанса, поэтому внутри def index
Я кладу:
try:
context["status"] = request.session['status']
del request.session['status']
except KeyError:
context["status"] = 'fail'