es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se pasan dos parámetros a través de una URL en Django?

Quiero pasar dos parámetros a través de la URL en Django. Primero que nada, aquí está mi HTML actual:

{% for lesson in lessons %}
{% for class in lessons %}
    <a href="{% url 'next-page' lesson.pk %}">Link a la siguiente página {{lesson}} {{class}}
{% endfor %}
{% endfor %}

Y este es mi URL:

path('nextpage/<int:pk>/', ListView.as_view(), name='next-page'),

Sin embargo, quiero algo como lo siguiente:

{% for lesson in lessons %}
{% for class in lessons %}
    <a href="{% url 'next-page' lesson.pk class.pk %}">Link a la siguiente página {{lesson}} {{class}}
{% endfor %}
{% endfor %}

y mi URL es:

path('nextpage/<int:pk1>/<int:pk2>/', ListView.as_view(), name='next-page'),

Luego, quiero poder acceder a las claves primarias en mi vista a continuación:

class LessonList(generic.ListView):
    model = Lesson
    template_name = 'lesson_list.html'
    context_object_name = "lessons"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        lesson_id = self.kwargs['pk1']
        class_id = self.kwargs['pk2']

        return context

Obviamente, el código anterior no funciona. Sin embargo, básicamente quiero poder pasar dos parámetros en la URL y acceder a ambos en la función get_context_data de mi vista. Gracias y por favor deja cualquier pregunta que tengas.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para pasar dos parámetros a través de la URL en Django, necesitas modificar el patrón de URL y también actualizar el código de tu vista para recuperar ambos parámetros.

    En tu plantilla HTML, debes actualizar la etiqueta de URL para pasar ambas claves primarias:

    <a href="{% url 'next-page' lesson.pk class.pk %}">Enlace a la siguiente página {{lesson}} {{class}}</a>
    

    En la configuración de tu URL, debes definir dos parámetros utilizando dos marcadores separados:

    path('nextpage/<int:pk1>/<int:pk2>/', LessonList.as_view(), name='next-page'),
    

    Finalmente, en tu código de vista, puedes recuperar ambos parámetros utilizando el diccionario self.kwargs:

    class LessonList(generic.ListView):
        model = Lesson
        template_name = 'lesson_list.html'
        context_object_name = "lessons"
    
        def get_context_data(self, **kwargs):
            context = super().get_context_data(**kwargs)
    
            lesson_id = self.kwargs['pk1']
            class_id = self.kwargs['pk2']
    
            # Haz algo con los parámetros aquí
    
            return context
    

    Ten en cuenta que debes utilizar los mismos nombres de parámetros tanto en el patrón de URL como en el código de la vista para recuperar los valores correctamente.

Comments are closed.