IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

[DJANGO]Templates, tag et égalité


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 22
    Par défaut [DJANGO]Templates, tag et égalité
    Bonjour!

    Je suis confronté à un problème dans mon utilisation de Django.

    Je souhaiterai dans mes templates faire des tests et vérifier si des variables sont égales ou égales à des chaînes de caractères. Voici un exemple que j'utilise pour un site web. J'ai une BDD avec des utilisateurs, une autre avec des communautés. Ces deux bases sont liées entre elles via une troisième appelée Rejoindre. Dans celle-ci je stocke différentes données qui me permettent d'avoir des informations sur l'utilisateur et la communauté.

    Mon fichier models.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class Communaute(models.Model):
        nom=models.CharField(max_length=50, verbose_name="Nom de la communauté", unique=True)   #nom de la communauté
        description=models.TextField(blank=True, verbose_name="Description")
        TYPE_COMMUNAUTE=(
            ('PUBLIQUE','Publique'),
            ('PRIVEE','Privée'),
        )
        type_communaute=models.CharField(max_length=50, verbose_name="Type de la communauté", choices=TYPE_COMMUNAUTE)
        inscriptionauto=models.BooleanField(default=False, verbose_name="Inscription automatique")
        membres=models.ManyToManyField(User, through='Rejoindre', verbose_name="Communaute", null=True, blank=True)
        def __unicode__(self):
            return self.nom
     
    class Rejoindre(models.Model):
        createur = models.BooleanField(default=False, verbose_name="Créateur de la communaute")
        date = models.DateTimeField(auto_now_add=True, auto_now=False,verbose_name="Rejoins depuis le:")
        user = models.ForeignKey(User)
        communaute=models.ForeignKey(Communaute)
        postuler=models.BooleanField(default=False, verbose_name="La personne a t'elle postulée")
        refuser=models.BooleanField(default=False, verbose_name="La personne est elle refusée")
        def __unicode__(self):
            return "Communauté: {0}".format(self.communaute.nom)
    Je souhaiterai afficher un tableau avec l'ensemble des communautés existantes en indiquant différentes informations, dont le nom du créateur. Le champs Rejoindre.createur est à True pour le user qui est le créateur. J'espère que c'est assez clair... Pour la partie templates, la voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <tr>
            <th>Nom de la communauté</th>
            <th>Type</th>
            <th>Nombre de membre</th>
            <th>Créateur</th>
        </tr>
        {% for communaute in communautes %}
        <tr>
            <td><a id="lien_site" href="/communaute/num-{{communaute.id}}">{{ communaute.nom }}</a></td>
            <td>{{communaute.type_communaute}}</td>
            <td>{{communaute.membres.all|length}} membre{{ communaute.membres.all|pluralize }}</td>
            <td>
                {% for membre in communaute.membres.all %}
                    {% if membre.rejoindre.createur=True %}
                        {{membres.username}}
                    {% endif %}
                {% endfor %}
            </td>
        </tr>
        {% endfor %}
    </table>
    Et bien sur, ça merde... Tout le tableau fonctionne, sauf la colonne créateur (j'ai tester sans mettre le if avec createur=True).

    Pour vous aider je mets le message d'erreur que j'ai :
    TemplateSyntaxError at /communaute/chercher-communaute/
    Could not parse the remainder: '=True' from 'membre.rejoindre.createur=True'

    Merci pour votre aide !

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 290
    Par défaut
    Bonjour,

    Essayez avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% if membre.rejoindre.createur == True %}
    ou mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% if membre.rejoindre.createur %}

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 22
    Par défaut
    Bonjour et merci de tes réponses !

    Malheureusement les solutions proposées ne fonctionne pas. Lorsque je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% if membre.rejoindre.createur == True %}
    (ou en mettant == "true", == "True", == true ...) j'ai toujours le même message d'erreur.
    Je ne pense pas qu'il est possible de tester la valeur d'un champs de cette façon...
    Lorsque je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% if membre.rejoindre.createur %}
    rien ne se passe et mon templates n’exécute même pas le code qui est après. Je n'ai par contre aucun message d'erreur. J'ai pourtant vérifier, j'ai bien un champs à True dans membre.rejoindre.createur
    ... je suis toujours bloqué !

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 290
    Par défaut
    Cela vient de votre modèle... Vous ne devez pas pouvoir accéder à "rejoindre" à partir de "membre" (qui est un User).

    Ce que je peux vous conseiller en tout cas c'est de limiter le code d'accès aux modèles dans votre template. Ce sera plus simple à tester s'il est dans votre views.py.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 22
    Par défaut
    Bonjour

    Ce que je peux vous conseiller en tout cas c'est de limiter le code d'accès aux modèles dans votre template. Ce sera plus simple à tester s'il est dans votre views.py.
    En principe j'essaye d'appliquer cela mais parfois je me retrouve bloquer, du moins je ne sais pas comment faire.
    Lorsque je souhaite afficher un tableau avec plusieurs éléments d'un modèle (réalisation d'une boucle for in dans le template) et pour chaque élément de la boucle je souhaite afficher une information liée à une autre table ayant pour clé l'élément du modèle, comment je fais?
    Je ne sais pas si ma demande est claire...
    En d'autre terme, je souhaite afficher dans ce cas là le nom du créateur de la communauté, via la table "Rejoindre".

  6. #6
    Membre expérimenté Avatar de Stopher
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juin 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 198
    Par défaut
    salut,
    si j'ai bien saisi ton problème, tu souhaites accéder à la valeur d'un tableau via une clef "dynamique" dans le template.

    si c'est le cas , ce n'est pas possible directement , il faut que tu passes par un filtre dédié.

    voici un exemple qui répond à cette problématique :

    http://stackoverflow.com/questions/8...ango-templates

    ch.

Discussions similaires

  1. Date en argument du tag url dans un template
    Par Heliodromel dans le forum Django
    Réponses: 5
    Dernier message: 26/08/2009, 15h48
  2. Réponses: 2
    Dernier message: 20/05/2008, 10h03
  3. Templates, pointeurs et égalités
    Par Romaincb dans le forum C++
    Réponses: 9
    Dernier message: 12/03/2007, 09h58
  4. Velocity Template/Tag library : comparaison ?
    Par joseph_p dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 09/11/2005, 13h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo