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'
Другие вопросы по тегам