Возможно ли в django вернуть перенаправление и вернуть рендеринг вместе?
Я хочу обновить страницу после возврата рендера. Я могу использовать return redirect
на ту же страницу, но я запутался, могу ли я использовать и return render, и return redirect в одной и той же функции представления. Есть ли другой способ перезагрузить страницу, кроме редиректа, не затрагивая возвращаемый рендеринг?
О проекте: Я создаю программу для тренировки набора текста типа www.keybr.com
Вот мой файл views.py:
from django.shortcuts import render
import os
import keyboard
def text_display(request):
char_no = request.session.get('char_no', -1) + 1
request.session['char_no'] = char_no
f = open(os.path.dirname(os.path.realpath(__file__)) + '\\text1.txt', "r+")
file_contents = f.read()
if char_no >= len(file_contents):
return render(request,'type/main.html',{"key_press":"Test is over"})
for line in file_contents:
for ch in line:
if keyboard.read_key() == file_contents[char_no]:
ctx = {'text': file_contents, 'key_press':'You pressed the right key.'}
f.close()
return render(request, 'type/main.html', ctx)# Here after returning the render I want to re run this view function. So, reloading looks like a possible thing to do.
else:
ctx = {'text': file_contents, 'key_press':'You pressed the wrong key.'}
return render(request, 'type/main.html', ctx)# Here after returning the render I want to re run this view function. So, reloading looks like a possible thing to do.
Да, перенаправление может быть использовано в одной и той же функции представления. Вот пример
def index(request):
ctx = {}
# one in 3 chance to redirect
if random.randint(0, 2) > 1:
return redirect ('/')
return render(request, 'type/main.html', ctx)
Метод редиректа в Django возвращает клиенту заголовок[302], запрашивая загрузку на новую страницу. Если вы не видите обновления browswr, это потому, что браузер не завершил запрос.