2011-06-07 11 views
15

Estoy usando django-taggit en uno de mis proyectos y puedo guardar y atar las etiquetas con registros específicos. Ahora la pregunta es ¿cómo se muestran las etiquetas relacionadas con cada registro?django-taggit: cómo se muestran las etiquetas relacionadas con cada registro

Por ejemplo en mi página Quiero mostrar un registro que contiene un título y contenido y luego debajo de él quiero mostrar las etiquetas vinculadas a ese registro.

¿Qué se incluye en las vistas.py y mytemplate.html? Los ejemplos reales serían realmente apreciados.

Respuesta

27

models.py

from django.db import models 
from taggit.managers import TaggableManager 

class MyObject(models.Model): 
    title = models.CharField(max_length=100) 
    content = models.TextField() 

    tags = TaggableManager() 

views.py

from django.views.generic import simple 

def show_object(request): 
    """ View all objects """ 
    return simple.direct_to_template(request, 
     template="folder/template.html", 
     extra_context={ 
      'objects':MyObject.objects.all(), 
     }) 

template.html

{% for object in objects %} 
    <h2>{{ object.title }}</h2> 
    <p>{{ object.content }}</p> 
    <ul> 
     {% for tag in object.tags.all %} 
      <li> {{ tag.name }} </li> 
     {% endfor %} 
    </ul> 
{% endfor %} 
+0

¡Gracias! ¡Gran ejemplo! – avatar

+0

esto creará una consulta db adicional para cada objeto que tenga. si tienes muchos objetos, eso realmente puede ralentizar las cosas. Me he encontrado con eso y estoy buscando una solución. – teewuane

+0

Estoy un poco tarde respondiendo @teewuane, pero sí, tienes razón. Se puede reducir haciendo uso de 'preselect_related' para captar previamente las etiquetas en el frente –

13

Si se tiene prisa y También puedes probar:

{{context_name.tags.all|join:", "}} 
+1

Esto era exactamente lo que necesitaba. – Pureferret

Cuestiones relacionadas