Estoy creando una aplicación de chat en Django. Estoy usando ajax para que los resultados de búsqueda aparezcan después de escribir cada carácter en el cuadro de entrada. Funciona bien. Pero ahora estoy tratando de agregar un enlace a los resultados de la búsqueda (que son solo un nombre) para que si hago clic en uno de los resultados de la búsqueda vaya a ese enlace y se llame a views.chat_from_search donde manejo toda la lógica de creación. un chat y la representación de la página. Traté de agregar un detector de eventos y luego redirigir al nuevo enlace (el código que traté de agregar el enlace está dentro de las etiquetas ** **) pero da como resultado este error Invertir para 'chatSearch' con argumentos '('',) ' extraviado. 1 patrón probado: ['chat/search/(?P<chat_user_name>[^/]+)/\Z'] Mi código para la búsqueda ajax y donde creo el div que contiene los resultados de la búsqueda (y mi intento fallido de agregar un enlace) está dentro de sendSearchData (que se encuentra a continuación). el ajax devuelve una matriz de objetos que solo tiene un atributo de nombre de usuario. Esta es la estructura de los objetos (estoy creando esto y agregándolo a una lista que devuelvo)
indiv_user = { 'name': user.username, } const sendSearchData = (contact_name) => { $.ajax({ type: 'POST', url: '/search/', data:{ 'csrfmiddlewaretoken': csrf, 'contact_name': contact_name, }, success: (res) =>{ const data = res.data; document.getElementById('search_result_box').innerHTML = "" if (Array.isArray(data)){ data.forEach(contact => { document.getElementById('search_result_box').innerHTML += " <div id ='"+contact.name+"'class='search-person'><h5 class='search-name'>"+contact.name+"</h5></div>"; **document.getElementById(contact.name).addEventListener('click',function(){ location.href= "{% url 'chatPage:chatSearch' contact.name %}" });** }); } }, error: (err)=>{ console.log(err) } }) }Mi urls.py es
from django.urls import path from chatPage import views app_name = "chatPage" urlpatterns = [ path('', views.homepage, name='homepage'), path('chat/<int:chatID>/', views.home, name='chat'), path('chat/search/<str:chat_user_name>/', views.chat_from_search, name='chatSearch'), #noqa path('search/', views.search_result, name='search') ]¿Alguien puede decirme por qué esto no funciona? Además, ¿cómo puedo agregar un enlace dentro del div después de obtener el resultado de ajax o debería abordar esto de una manera diferente? He estado tratando de resolver esto durante 2 días y cualquier ayuda sería apreciada. Muchísimas gracias.
El lenguaje de formato de la plantilla (p. ej., las partes {{ code }} y {% code %}) se evalúan antes de que Djano entregue la página por primera vez. No puede evaluarlos después de que la página se haya enviado al navegador, por lo que no puede tomar los resultados de Ajax y formatearlos. El error que está recibiendo se debe a que está tratando de realizar la evaluación antes de que el usuario haya obtenido la página, por lo que no tiene un nombre de contacto para usar.
Tendrá que construir su URL de manera diferente, usando solo los datos ajax y javascript. Afortunadamente, la construcción de URL parece simple en este caso, y ya tiene la variable necesaria, por lo que debería poder usar algo como
location.href= "/chat/search/" + contact.nameLa otra opción sería actualizar su solicitud de publicación para incluir también la URL de búsqueda de chat como parte de la respuesta, por ejemplo,
contact { "name": user.name, "url" : reverse('chatsearch', kwargs={"chat_user_name": user.username] }Entonces podrías simplemente referirte a
location.href= contact.url