Как обработкой вывести новые данные в шаблон на ту же страницу в Django?

Ребят, привет.

Задача: Опросник. Человек выбирает значения, нажимает кнопку "проверить результат". Если все ок, то на этой же странице появляется надпись, что все хорошо, если есть ошибки, то появляется надпись, что все плохо.

View-ка:

def answerset(request):
    done = csrf(request)
    if request.POST:
        question1 = request.POST.get('question1', '')
        question2 = request.POST.get('question2', '')
        question3 = request.POST.get('question3', '')
        if question1 == 'answertrue' and question2 == 'answertrue' and question3 == 'answertrue':
            allright = {'allright' : "Все верно"}
            return redirect('#', done, allright )
        else:
            allwrong = {'allwrong' : "Попробуйте еще раз"}
            return redirect('', done, allwrong)


Вывод в форму:

{% block question_area %}
	{% if allright %}
		<label class='error'>{{allright}}</label>
	{% endif %}
	....
{% endblock %}


Проблемы:

1) Текст не появляется. (если указать хардссылку. Вариант с хардой - сразу не ок, так как эти ссылки формируются динамически).
2) Не получается сделать редирект сам на себя, варианты с "", "#" - не пашут.

Т..е как вывести доп-поле после обработки формы, как во вьюшке сделать редирект на себя.

Update:

Если указываем рендер и данные, то получается генерируется пустая страница.

Сама страница, где стоит вопрос генерируется следующим образом:

1) Через URL передается question_id, которые в дальнейшем помогает джанге понять, какую именно страницу нужно рендерить.

url(r'^question(?P<question_id>[0-9]+)$', 'bakot.views.question', name='question')


2) Сама вьюшка для страницы:

def question(request, question_id):
    questionship = Question.objects.filter(step_id = question_id)
    answership = questionship.prefetch_related().all #https://docs.djangoproject.com/es/1.9/ref/models/relations/
    context = {
        "questionship" : questionship,
        "answership" : answership,
    }
    return render(request, 'bakot/question.html', context)


А тут получается форма обрабатывается, но в итоге не происходит возврата на site.ru/question1 . Т.е. я не могу понять, как форму возвращать посетителя на ту же страницу.

Update2

Сделал вот такую функцию:

def question(request, question_id):
    questionship = Question.objects.filter(step_id = question_id)
    answership = questionship.prefetch_related().all #https://docs.djangoproject.com/es/1.9/ref/models/relations/
    question_id = question_id
    context = {
        "questionship" : questionship,
        "answership" : answership,
        "question_id" : question_id
    }
    return render(request, 'bakot/question.html', context)

def answerset(request):
    done = csrf(request)
    if request.POST:
        page_number = str(request.POST.get('mono', '')) #Вставил на страницу параметр, который генерируется автоматически из question_id.
        question1 = request.POST.get('question1', '')
        question2 = request.POST.get('question2', '')
        question3 = request.POST.get('question3', '')
        if question1 == 'answertrue' and question2 == 'answertrue' and question3 == 'answertrue':
            allright = "Пользователь не найден"
            questionship = Question.objects.filter(step_id = page_number)
            answership = questionship.prefetch_related().all
            contex = {
                "questionship" : questionship,
                "answership" : answership,
                "allright" : allright
            }
            done.update(contex)
            return render(request, 'bakot/question.html', done)
        else:
            allwrong = {'allwrong' : "Пользователь не найден"}
            return redirect('', done, allwrong)


В итоге, получается так, что мы находимся на странице site.ru/question1 - кликаем, нас перекидывает на site.ru/answerset, где отображается вся правильная информация. На этой странице параметр question_id (так как он не передается через URL) не задется, и при повторной попытке ввести свои данные, страница крашится.

Тут либо что-то сделать с данным параметров надо, либо понять, почему нас перекидывает не на site.ru/question1, а на site.ru/answerset
  • Вопрос задан
  • 839 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы