¿Cómo solucionar la página no encontró error en Django?

Tengo una lista de múltiples proyectos en mi página, y cada proyecto tiene un botón de uso de contacto, si un usuario hace clic en contact us página entonces abrirá un formulario popup, y estoy haciendo esto usando Ajax. Pero siempre que haga clic en el botón que muestra página no encontrada en Network(Después de depurar). Por favor házmelo saber cómo puedo resolver el problema.

Aquí está mi urls.py archivo...

re_path('ajax/datadis//$', views.dataview, name='dataview'),

aquí está mi views.py archivo...

def dataview(request, id):
    template_name = 'page/ajax/popup.html'
    return render(request, template_name)

aquí está mi index.html código de archivo...

Aquí está mi Código Ajax... Que abre el formulario de Popup...


function projectDetail(id){
var html = '';
var modalDiv = $("#modalData");
$.ajax({
url: "{% url 'appname:dataview' %}"+id,
type:"GET",
dataType:"HTML",
success: function(res) {
 modalDiv.html(res);
$("#exampleModal").modal("show");
 }
});
}

aquí está mi código de modelo popup...

y este es el error que me estoy poniendo en consola.

Page not found (404)    
Request URL:    http://127.0.0.1:8000/ajax/datadis/%3Cint:pk%3E/161

Pregunta hecha hace 3 años, 4 meses, 29 días - Por bugbusterx


3 Respuestas:

  • re_path tiene una sintaxis diferente. Parece que el camino es suficiente para esta url.

    path('ajax/datadis//', views.dataview, name='dataview'),
    

    la etiqueta url en la plantilla esperará el id como parámetro.

    {% url 'appname:dataview' id %}",
    

    Respondida el Dec 17, 2020 a las 16:26 - por binarybrainiac

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás experimentando se debe a que la URL en tu archivo de Javascript y en tu archivo urls.py de Django no están configuradas correctamente para pasar el parámetro id a la vista dataview.

    Vamos a corregir esto:

    • En tu archivo urls.py, debes corregir la expresión regular para aceptar el parámetro pk en lugar de id:
    python
    re_path('ajax/datadis/(?P\d+)/$', views.dataview, name='dataview'),
    

    • En tu archivo Javascript, cuando haces la llamada Ajax, asegúrate de incluir el parámetro id en la URL:
    javascript
    function projectDetail(id){
        var html = '';
        var modalDiv = $("modalData");    $.ajax({
            url: "{% url 'appname:dataview' %}" + id + "/",
            type: "GET",
            dataType: "html",
            success: function(res) {
                modalDiv.html(res);
                $("exampleModal").modal("show");        }
        });
    }
    

    Al realizar estos cambios, la URL pasará correctamente el parámetro id a la vista dataview y se debería resolver el error de página no encontrada. Recuerda también reiniciar tu servidor después de hacer estos cambios.

    Respondida el Dec 18, 2020 a las 16:24 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error "Página no encontrada" indica que Django no puede encontrar la vista asociada con la URL solicitada. El problema aquí es que la URL que está utilizando en su llamada Ajax tiene un formato incorrecto.

    En su código, ha definido la URL para la vista dataview de la siguiente manera:

    
    re_path('ajax/datadis//$', views.dataview, name='dataview'),
    

    Esto significa que la URL debe tener el formato /ajax/datadis/161/, donde 161 es el valor del parámetro pk. Sin embargo, en su llamada Ajax, está utilizando la siguiente URL:

    
    var url: "{% url 'appname:dataview' %}"+id,
    

    Esto generará una URL con el formato /appname/dataview/161, que no coincide con la URL definida en urls.py.

    Para resolver este problema, debe modificar su llamada Ajax para que utilice el formato de URL correcto. Aquí tienes el código corregido:

    
    function projectDetail(id){
    var html = '';
    var modalDiv = $("modalData");$.ajax({
    url: "{% url 'appname:dataview' id %}",
    type:"GET",
    dataType:"HTML",
    success: function(res) {
     modalDiv.html(res);
    $("exampleModal").modal("show"); }
    });
    }
    

    Con este cambio, la llamada Ajax generará una URL con el formato /appname/dataview/161/, que coincidirá con la URL definida en urls.py.

    Respondida el Dec 18, 2020 a las 16:32 - por Gemini

    Votos positivos: 0 | Votos negativos: 0