arrow_back
Résolue thumb_up

Context django.

# Affichage # Web # Django

Bonjour,
J'ai une question sur le context en django. J'écris un site pour une assocication de peinture et je souhaite une page pour afficher tous les tableaux et une page pour afficher un tableau en détail.

Voila ma vue :

from django.shortcuts import render
from django.views.generic import DetailView, ListView

from .models import ArtObject


class Gallery(ListView):
    model = ArtObject
    template_name = "gallery/gallery.html"
    context_object_name = "galleries"
    paginate_by = 12


class GalleryDetailView(DetailView):
    model = ArtObject
    template_name = "gallery/image-detail.html"

Voia mon url :

from django.urls import path

from . import views

app_name = "gallery"

urlpatterns = [
    path("", views.Gallery.as_view(), name="gallery"),
    path("detail/<str:slug>/", views.GalleryDetailView.as_view(), name="detail"),
]

Et voila mes deux templates :
Le gallery.html

{% extends "base/base.html" %}
{% load static %}
{% block content %}
<div class="page-content">
<div class="container">
<div class="container pp-section">
<div class="row">
<div class="col-md-9 col-sm-12 px-0">
<h1 class="h3"> We are Photo Perfect, A Digital Photography Studio.</h1>
</div>
</div>
</div>
<div class="container px-0 py-4">
<div class="pp-category-filter">
<div class="row">
<div class="col-sm-12"><a class="btn btn-primary pp-filter-button" data-filter="all" href="#">All</a><a class="btn btn-outline-primary pp-filter-button" data-filter="people" href="#">People</a><a class="btn btn-outline-primary pp-filter-button" data-filter="nature" href="#">Nature</a><a class="btn btn-outline-primary pp-filter-button" data-filter="computer" href="#">Computer</a><a class="btn btn-outline-primary pp-filter-button" data-filter="food" href="#">Food</a></div>
</div>
</div>
</div>
<div class="container px-0">
<div class="pp-gallery">
<div class="card-columns">
                    {% for art in galleries %}
                    <div class="card" data-groups='["nature"]'><a href="{{ art.get_absolute_url }}">
<figure class="pp-effect"><img alt="" class="img-fluid" src="{{ art.image.url }}"/>
<figcaption>
<div class="h4">{{art.title}}</div>
<p>{{ art.author }}</p>
</figcaption>
</figure>
</a></div>
                    {% endfor %}
                </div>
</div>
</div>
<div class="pp-section"></div>
</div>
</div>
{% endblock %}

Voila mon image-detail.html:
{% extends "base/base.html" %}
{% load static %}
{% block content %}
<div class="page-content">
<div class="container">
<div class="container pp-section">
<div class="h3 font-weight-normal">{{ art.title }}</div>
<img class="img-fluid mt-4" src="{{ art.image.url }}"/>
<div class="row mt-5">
<div class="col-md-3">
<div class="h5">Tags</div>
<a class="mr-1 badge badge-primary" href="#">Nature</a><a class="mr-1 badge badge-primary" href="#">Model</a><a class="badge badge-primary" href="#">Flower</a>
<div class="h5 pt-4">Year</div>
<p>{{ art.created }}</p>
</div>
<div class="col-md-9">
<p>{{ art.description }}</p>
</div>
</div>
</div>
<div class="pp-section"></div>
</div>
</div>
<h1>{{ object.title }}</h1> <!-- Si l'objet est bien disponible, cela affichera son titre -->
<!-- Affiche toutes les variables de contexte disponibles -->
<div class="context">
            {% for key, value in view.kwargs.items %}
                {{ key }} : {{ value }} <br/>
            {% endfor %}
            {% for key, value in request.GET.items %}
                {{ key }} : {{ value }} <br/>
            {% endfor %}
            {% for key, value in view_context.items %}
                {{ key }} : {{ value }} <br/>
            {% endfor %}
        </div>


{% endblock %}

Je ne comprends pas pourquoi "art" n'est pas présent dans le context :

Voila le résultat :

Hello,

peux tu montrer ton model aussi stp ? Je ne suis pas sûr de comprendre pourquoi tu t'attends à voir "art" en fait ?
art c'est ta variable qui parcourt object_list que tu as renommé en "galleries" dans ta ListView :
context_object_name = "galleries"

Bonjour,

Oui c'est ça. Mais pourquoi je la retrouve pas dans ma vue de détail ? C'est pourtant le cas avec une autre app que j'ai créé.

J'ai crée une autre app event dans laquelle je liste tous les events dans une page html event_list.html et dans ce template j'utilise la variable* event* pour parcourir mon object_list renomé en "events". Dans cette page html j'indique une url en utilisant l'url absolue, qui m'amène à une page event.html dans laquelle je peux utiliser la variable event utilisé précédement dans le template event_list.html.

Je n'ai pas le même comportement dans mon app gallery pour la variable art.

Voila mon modèle :

class ArtObject(models.Model):
    title = models.CharField(max_length=255)
    author = models.CharField(max_length=255)
    description = models.TextField()
    slug = models.SlugField(max_length=200)
    image = models.ImageField()
    created = models.DateTimeField(auto_now=True)
    updated = models.DateTimeField(auto_now=True)
    tags = TaggableManager()

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("gallery:detail", args=[self.slug],)

J'ai compris mon erreur, j'avais oublié de passer la variable art dans le context.

Merci pour l'aide.

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte person

Rechercher sur le site

open_in_new

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.