Question

J'ai un modèle assez simple qui utilise Django Taggit pour le marquage.

Tout fonctionne très bien, mais maintenant je voudrais développer certaines fonctionnalités et je suis un peu confus.

Ce que je veux deux vues.

Une qui montre tous mes tags dans le système. Celui qui montre tout le contenu de mon application avec une étiquette spécifique.

Ce qui fait sens pour moi est de faire ce qui suit pour chaque vue.

views.py pour monapp

  1. Tous les tags

    d'importer myapp.models App

    de Tag à l'importation de taggit.models

    classe TagList (ListView):

    "" "Obtenez toutes les balises dans la db """

    queryset = Tag.objects.all()
    template_name = "myapp/TagList.html"
    paginate_by = 10
    
  2. Tout le contenu pour une balise

    d'importer myapp.models App

    de Tag à l'importation de taggit.models

    classe TaggedList (ListView): "" "Obtenez toutes les Contet pour une "" tag"

    template_name = "myapp/TaggedList.html"
    
    def get_object(self):
        return get_list_or_404(App, tag__iexact=self.kwargs['tag'])
    

Ai-je perdu l'esprit ou est-ce vraiment si facile? BTW, j'utilise des vues de classe générique.

Merci pour l'aide. Dave

Était-ce utile?

La solution

2. Je crois que c'est pour le retour d'un seul objet, pas plusieurs objets.

def get_object(self):  

Au lieu de cela peut-être vous devriez essayer quelque chose comme ce qui suit:

def get_queryset(self):
    return TaggedItem.objects.filter(tag__iexact=self.kwargs['tag'])

Cette fonction renvoie une liste d'articles avec GenericForeignKeys

Si vous ne souhaitez dans un modèle spécifique App puis

    return App.objects.filter(tags__name__in=[self.kwargs['tag']])

nom variable par défaut dans le modèle est alors TaggedItem_list

{% for item in TaggedItem_list %}
   {{item.content_object}} {# generic foreign key here #}
{% endfor %}

Le urls.py devrait être similaire à

url(r'someapp/(?P<tag>\w+)/$', TaggedList.as_view())
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top