Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

325
Vistas
Pasar múltiples objetos a plantillas con render

Soy principiante en Django.

Tengo un proyecto con los siguientes modelos:

Mis artículos modelos:

 class Post(models.Model): title = models.CharField(max_length=200) slug = models.SlugField(max_length=160) content = models.TextField() image = models.ImageField(upload_to=upload_location) timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) updated = models.DateTimeField(auto_now=True, auto_now_add=False) categorie = models.CharField(max_length=200) categorie = models.ForeignKey('categorie.Categorie') publier = models.BooleanField()

Mis modelos de categorías de cartera que están vinculados con mi modelo de artículo:

 class Categorieport(models.Model): title = models.CharField(max_length=200) article = models.OneToOneField('posts.Post')

Y por ultimo, mi portafolio de modelos con todas las fotos:

 class Portfolio(models.Model): title = models.CharField(max_length=200) image = models.ImageField(upload_to=upload_location) timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) updated = models.DateTimeField(auto_now=True, auto_now_add=False) categorieportfolio = models.ForeignKey('Categorieport')

En una vista y una plantilla, me gustaría mostrar información sobre el artículo y la cartera relacionada con el artículo.

Escribí la siguiente vista:

 def portfolio(request, article=None): portfolio = get_object_or_404(Categorieport, article=article) image_portfolio = portfolio.portfolio_set.all() return render(request, 'portfolio1.html', {'portfolio': portfolio, 'image_portfolio': image_portfolio})

Y las siguientes plantillas:

 <div class="titre-display"> <h2>{{ portfolio.article.timestamp|date:"d EY" }} / {{ portfolio.article.categorie}} </h2> <h1>{{ portfolio.article.title}}</h1> </div> <div class="content-display"> <div class="content-display-main"> <div class="content-display-main-portfolio"> <div class="image-portfolio"> <a class="example-image-link" href="{{ image_portfolio.image.url }}" data-lightbox="example-set" data-title="{{image_portfolio.title}}"> </a>

Puedo acceder a la información de mi artículo pero no puedo acceder a la información de mi portafolio. Lo probé con el shell, y funciona. No puedo entender por qué no funciona en mi vista y plantilla.

¿Tienes alguna idea?

Gracias de antemano

Singertwist

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Prueba esto:

 # views.py def portfolio(request, article=None): # first get the Post instance with slug = article (I'm assuming article passed as url argument, is a slug) post = get_object_or_404(Post, slug=article) # get the Categoriepost object based on a specifi article categorie_port = get_object_or_404(Categorieport, article=post) # image_portfolio is a QuerySet (that is a list of Portfolio objects) image_portfolio = categorie_port.portfolio_set.all() return render(request, 'portfolio1.html', {'portfolio': categorie_port, 'image_portfolio': image_portfolio})

Deje su HTML como está.

about 4 years ago · Santiago Trujillo Denunciar

0

Su image_portfolio es un conjunto de consultas, lo que significa que es una especie de lista, debe usar un bucle para acceder a los elementos y luego a las propiedades:

 <div class="content-display"> <div class="content-display-main"> <div class="content-display-main-portfolio"> <div class="image-portfolio"> {% for item_img in image_portfolio %} <a class="example-image-link" href="{{ item_img.image.url }}" data-lightbox="example-set" data-title="{{item_img.title}}"></a> {% endfor %}
about 4 years ago · Santiago Trujillo Denunciar

0

Hola gracias a todos por su respuesta.

Entonces, usé un bucle for para resolver mi caso como se mencionó anteriormente.

A continuación, mi código:

 <div class="titre-display"> <h2>{{ portfolio.article.timestamp|date:"d EY" }} / {{ portfolio.article.categorie}} </h2> <h1>{{ portfolio.article.title}}</h1> </div> <div class="content-display"> <div class="content-display-main"> <div class="content-display-main-portfolio"> {% for photo in image_portfolio %} <div class="image-portfolio"> <a class="example-image-link" href="{{ photo.image.url }}" data-lightbox="example-set" data-title="{{photo.title}}"> {% thumbnail photo.image "300x300" crop="center" as im %} <img class="example-image" src="{{ im.url }}" alt=""/> {% endthumbnail %} </a> <p>{{photo.title}}</p> </div> {% empty %} <p>Aucun portfolio.</p> {% endfor %} </div> </div>

Y mis puntos de vista:

 def portfolio(request, slug=None, article=None): slug = get_object_or_404(Post, slug=slug) portfolio = get_object_or_404(Categorieport, article=article) image_portfolio = portfolio.portfolio_set.all() return render(request, 'portfolio.html', {'portfolio': portfolio, 'image_portfolio': image_portfolio})

De nuevo, gracias por tu ayuda

Singertwist

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda