0

J'essaie d'utiliser des filtres de gabarit pour faire tourner une boucle, mais je suis incapable de combiner deux instructions python dans le même énoncé/modèle. Quelle est la bonne façon de combiner deux variables dans un modèle? S'il vous plaît voir la syntaxe et l'explication ci-dessous:Comment imbriquer ou utiliser conjointement deux balises de gabarit dans des gabarits Django?

Je construis un forum avec un index double, ce qui signifie, j'ai un col-md-2 avec la liste des catégories. Chaque catégorie a un forum, et en fonction de la catégorie cliquée, les forums de cette catégorie remplissent le prochain col-md-2. Le col-md-8 restant obtient son contenu basé sur quelle catégorie et quel forum est sélectionné.

Ma logique:

J'ai défini une étiquette de modèle qui charge la liste des catégories qui ne changent jamais quelle que soit la page est chargée ou quelle catégorie ou forum est sélectionné. Donc ça fonctionne bien. Mais en fonction de la catégorie sélectionnée, ma deuxième colonne doit être remplie. Pour cela, j'essaie de définir un filtre personnalisé (ci-dessous). Cependant, je ne suis pas sûr de savoir comment l'utiliser car il doit être passé à un autre modèle où il exécute une boucle pour rendre le code HTML. Même si je crée la boucle for dans ce modèle (plutôt que de le passer à un autre), je dois toujours faire des balises imbriquées, quelque chose comme: {% for forum in {{ forum.category|forumindexlistbycategory }} %} Dans les deux cas, j'obtiens une erreur de type Invalid filter: 'forumindexlistbycategory' ou "with" in u'include' tag needs at least one keyword argument.

J'ai défini le filtre de modèle personnalisé suivant dans mon pybb_tags.py:

from pybb.models import Forum 

@register.filter 
def forumindexlistbycat(category): 
    forumlistbycat = Forum.objects.filter(category=category) 
    return forumlistbycat 

Et dans mon modèle, je suis en train de le charger comme suit:

{% load i18n pybb_tags %} 

<div class='category'> 
    {% if category %} 
    <h3>{{ category }}</h3> 
    {% include 'pybb/forumindex_list.html' with forum_list=category.forums_accessed category=category parent_forum='' %} 
    {% else %} 
    <h3>{{ forum.category }}</h3> 
    {% include 'pybb/forumindex_list.html' with forum_list= %}{{ forum.category|forumindexlistbycategory }} 
    {% endif %} 
</div> 

Répondre

2

Vous doit d'abord enregistrer correctement le tag de modèle.

from django import template 
from pybb.models import Forum 

register = template.Library() 

@register.filter 
def forumindexlistbycat(category): 
    forumlistbycat = Forum.objects.filter(category=category) 
    return forumlistbycat 

Placer le code ci-dessus dans le fichier de nom comme filtre, de sorte forumindexlistbycat.py et déplacer ce fichier vers le dossier templatetags dans votre application. Si vous n'avez pas ce dossier, vous devez le créer. N'oubliez pas d'ajouter le fichier vide __init__.py dans votre dossier templatetags. Et maintenant, vous pouvez l'utiliser dans le modèle, donc:

{% load i18n forumindexlistbycat %} 

Lorsque votre templatetag vous est inscrit le charger par son nom. Et vous l'utilisez comme:

{% include 'pybb/forumindex_list.html' with forum_list=forum.category|forumindexlistbycategory %} 

Vérifiez pour plus d'informations - Guide on Custom template tags and filters.

+0

Salut. Le nom du fichier templatetag personnalisé contenant ce filtre personnalisé est pybb_tags.py, donc j'ai essayé chacun de '{% charger i18n pybb_tags forumindexlistbycat%}', '{% charger i18n pybb_tags%}', et '{% charger i18n pybb_tags% } {% forumindexlistbycat comme forumindexlistbycategory%} 'mais chaque fois que je me suis mis de ces deux erreurs:' Invalid block tag sur la ligne 2: 'forumindexlistbycat'. Avez-vous oublié d'enregistrer ou de charger cette balise? »Ou« forumindexlistbycat »n'est pas une bibliothèque de balises enregistrée.». Je pense que votre syntaxe peut être vraie, mais comment puis-je charger ce filtre sur mon modèle correctement? –

+0

Essayez de nommer votre fichier de tags en tant que filtre, et placez-le dans le dossier 'templatetags' du répertoire de votre application. Donc, il a un chemin comme '../app/templatetags/forumindexlistbycat.py' – toffi9

+0

Ajoutez aussi le fichier vide '__init __. Py' dans votre dossier templatetags. – toffi9