Saltar al contenido

¿Qué es context_object_name en las vistas de django?

este problema se puede abordar de variadas formas, pero te enseñamos la respuesta más completa para nosotros.

Solución:

Si no proporciona “context_object_name”, su vista puede verse así:

    % for publisher in object_list %
  • publisher.name
  • % endfor %

Pero si proporciona “context_object_name”: “publisher_list”, entonces puede escribir una vista como:

    % for publisher in publisher_list %
  • publisher.name
  • % endfor %

Eso significa que puede cambiar el nombre del parámetro original (object_list) a cualquier nombre a través de “context_object_name” para su vista. Espero que ayude 🙂

Ok, lo tengo por mi cuenta! 🙂

Es solo un nombre de variable comprensible para humanos para acceder desde plantillas

https://docs.djangoproject.com/en/1.10/topics/class-based-views/generic-display/#making-friendly-template-contexts

Supongamos las siguientes publicaciones/views.py:

# posts/views.py
from django.views.generic import ListView from .models import Post

class HomePageView(ListView): 
    model = Post
    template_name = 'home.html'

En la primera línea estamos importando ListView y en la segunda línea necesitamos definir explícitamente qué modelo estamos usando. En la vista, subclasificamos ListView, especificamos nuestro nombre de modelo y especificamos nuestra referencia de plantilla. Internamente, ListView devuelve un objeto llamado lista_objetos que queremos mostrar en nuestra plantilla.

En nuestro archivo de plantillas home.html podemos usar el bucle for del lenguaje de plantillas de Django para listar todos los objetos en lista_objetos

¿Por qué object_list? Este es el nombre de la variable que nos devuelve ListView.

Veamos nuestras templates/home.html


Message board homepage

    % for post in object_list %
  • post
  • % endfor %

¿Ves la lista de objetos arriba? ¿No es un nombre muy amigable? Para que sea más fácil de usar, podemos proporcionar en su lugar un nombre explícito usando nombre_objeto_contexto.

Esto ayuda a cualquier otra persona que lea el código a comprender qué es variable en el contexto de la plantilla, además, es mucho más fácil de leer y comprender.

Así que regresemos a nuestro archivo posts/views.py y cámbielo agregando la siguiente línea:


context_object_name = 'all_posts_list' # <----- new

Así que nuestro nuevo views.py se ve así ahora:

# posts/views.py
from django.views.generic import ListView from .models import Post

class HomePageView(ListView): model = Post

    template_name = 'home.html'

    context_object_name = 'all_posts_list' # <----- new

Y no olvidemos actualizar nuestra plantilla ahora:


Message board homepage

    % for post in all_posts_list %
  • post
  • % endfor %

Podrías haberlo dejado como object_list y aún funcionaría, pero entiendes la idea.

Recuerda que tienes la opción de explicar si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *