Кнопка Submit разрывает HTML-рендеринг с помощью Django
Я работаю над простым сайтом, просто для изучения Django. У меня возникли проблемы при попытке отправить форму для поиска чего-либо в моей базе данных. Весь сайт работает нормально, но когда я ищу что-то в этом запросе, веб-проводник просто показывает необработанный HTML вместо того, чтобы отрендерить его.
Вот я делюсь своим мнением:
from django.http import HttpResponse
from django.shortcuts import render
from AppFinal.models import Usuario, Direccion, Estudio
from AppFinal.forms import UsuarioFormulario,
def buscarUsuario(request):
return render(request, 'AppFinal/buscarUsuario.html')
def buscar(request):
if request.GET['nombre']:
nombre=request.GET['nombre']
usuarios = Usuario.objects.filter(nombre__icontains=nombre)
return render(request, 'AppFinal/resultadoBusqueda.html', {'usuarios': usuarios}, {'nombre': nombre})
else:
respuesta = 'No enviaste datos'
return render(request, 'AppFinal/resultadoBusqueda.html', {'respuesta':respuesta})
def resultadoBusqueda(request):
return render(request, 'AppFinal/resultadoBusqueda.html')
Это файл URLs:
from xml.etree.ElementInclude import include
from django.urls import path
from AppFinal import views
import AppFinal
urlpatterns = [
path('', views.inicio, name='Inicio'),
path('buscarUsuario', views.buscarUsuario, name= 'buscarUsuario'),
path('resultadoBusqueda', views.resultadoBusqueda , name= 'resultadoBusqueda'),
path('usuario', views.usuario, name= 'usuario'),
path('buscar/', views.buscar),
]
Это HTML, где вы ищете определенный элемент в базе данных:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="/AppFinal/buscar/" method="GET"> {% csrf_token %}
<input type="string", name= "nombre", id= "nombre">
<input type="submit", value="Buscar">
</form>
</body>
</html>
А это HTML, который должен показывать результат поиска, и который не отображается:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
{% if usuarios %}
<p>Estamos buscando el: {{nombre}}</p>
<ul>
{% for usuario in usuarios %}
<li> {{usuario.nombre}}</li>
<li> {{usuario.apellido}}</li>
{% endfor %}
</ul>
{% else %}
<p>No hay datos con esta descripcion.</p>
{% endif %}
<p style="color: red;">{{respuesta}}</p>
</body>
</html>
Наконец, здесь я делюсь картинкой, чтобы вы могли увидеть, как это "не рендерится" (хотя код, кажется, работает, потому что там вы можете увидеть результат поиска в списке)
Я нашел проблему. Это была опечатка при определении контекста в файле views.
Вот неправильная строка:
return render(request, 'AppFinal/resultadoBusqueda.html', {'usuarios': usuarios}, {'nombre': nombre})
Должно быть:
return render(request, 'AppFinal/resultadoBusqueda.html', {'usuarios': usuarios, 'nombre': nombre})