Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Agregado el templatetag tag_cloud #1

Open
wants to merge 11 commits into from

2 participants

@wuilliam321

Como estas, mira ya hice un template tag para el sistema. Usé django-tagging y con ello eliminé la clase PalabraClave ya que la provee directamente el plugin, falta hacer algunos arreglos como:

  • Definir los rangos en los que cambiaremos el tamaño de letra (5 o 6 steps) para generar una verdadera nube. Ya que actualmente es solo una lista desordenada.
  • Hacer algunos filtros para que al presionar el enlace de una etiqueta, muestre los proyectos asociados.

No se que otra cosa me quedó pendiente, dale una mirada. Tengo una duda con el template tag_cloud.html que quedó al mismo nivel de base.html, ponerlo dentro de la carpeta de los template 'proyecto' imposibilita un poco la 'portabilidad' del templatetag.

Saludos!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
This page is out of date. Refresh to see the latest.
View
1  README
@@ -6,3 +6,4 @@ Dependencias
* Django (>= 1.3)
* PostgreSQL, SQLite, MySQL, etc.
+ * django-tagging
View
4 eisula/proyecto/admin.py
@@ -1,6 +1,7 @@
from django.contrib import admin
from eisula.proyecto.models import (ProyectoDeGrado, Estudiante, Profesor,
- PalabraClave, Materia, Biblioteca)
+ Materia, Biblioteca)
+from tagging.models import Tag
class ProyectoDeGradoAdmin(admin.ModelAdmin):
date_hierarchy = 'fecha_publicacion'
@@ -24,7 +25,6 @@ class ProyectoDeGradoAdmin(admin.ModelAdmin):
admin.site.register(Estudiante)
admin.site.register(Profesor)
-admin.site.register(PalabraClave)
admin.site.register(Materia)
admin.site.register(Biblioteca)
admin.site.register(ProyectoDeGrado, ProyectoDeGradoAdmin)
View
28 eisula/proyecto/models.py
@@ -5,6 +5,7 @@
from django.db import models
from django.template.defaultfilters import slugify
+from tagging.models import Tag
class Persona(models.Model):
"""
@@ -59,26 +60,6 @@ class Meta:
def get_absolute_url(self):
return ('professor_detail', (), {'slug': self.slug, 'pk': self.id})
-class PalabraClave(models.Model):
- """
- Descriptores o palabras claves asociadas al tema del Proyecto de Grado
- """
- etiqueta = models.CharField(max_length=32, unique=True)
- descripcion = models.TextField("descripción", blank=True)
- slug = models.SlugField(editable=False)
-
- class Meta:
- verbose_name_plural = "Palabras claves"
-
- def __unicode__(self):
- return self.etiqueta
-
- def save(self, *args, **kwargs):
- if not self.id:
- self.slug = slugify(self.etiqueta)
-
- super(PalabraClave, self).save(*args, **kwargs)
-
class Materia(models.Model):
"""
@@ -134,7 +115,7 @@ class ProyectoDeGrado(models.Model):
cota = models.CharField(max_length=16)
resumen = models.TextField()
fecha_publicacion = models.DateField("fecha de publicación")
- palabra_clave = models.ManyToManyField(PalabraClave)
+ palabra_clave = models.ManyToManyField(Tag)
enlace_repositorio = models.URLField()
nota = models.PositiveIntegerField(blank=True, null=True)
observacion = models.TextField("observación", blank=True)
@@ -150,6 +131,11 @@ def __unicode__(self):
return self.titulo
def save(self, *args, **kwargs):
+ tags = []
+ for tag in self.palabra_clave.values():
+ tags.append(tag['name'])
+ tags = " ".join(tags)
+ Tag.objects.update_tags(self, tags)
if not self.id:
value = " ".join((self.titulo, self.cota))
self.slug = slugify(value)
View
0  eisula/proyecto/templatetags/__init__.py
No changes.
View
20 eisula/proyecto/templatetags/tag_cloud.py
@@ -0,0 +1,20 @@
+from django import template
+from eisula.proyecto.models import ProyectoDeGrado
+from tagging.models import Tag
+
+register = template.Library()
+
+def do_tag_cloud(parser, token):
+ tag_name = token.split_contents()
+ tags = Tag.objects.usage_for_model(ProyectoDeGrado, counts=True)
+
+ return TagCloudNode([{'name':tag.name, 'count':tag.count} for tag in tags])
+tag_cloud = register.tag('tag_cloud', do_tag_cloud)
+
+class TagCloudNode(template.Node):
+ def __init__(self, tags):
+ self.tags = tags
+
+ def render(self, context):
+ t = template.loader.get_template('tag_cloud.html')
+ return t.render(template.Context({'tags':self.tags}, autoescape=context.autoescape))
View
1  eisula/settings.py
@@ -123,6 +123,7 @@
# 'django.contrib.admindocs',
'eisula.proyecto',
'django_extensions',
+ 'tagging',
)
# A sample logging configuration. The only tangible logging
View
10 eisula/templates/base.html
@@ -54,14 +54,8 @@
<div id="sidebar">
{% block sidebar %}
-<h3>Palabras Claves</h3>
-<ul>
-<li><a href="#">Conflantur</a></li>
-<li><a href="#">Externarum vi</a></li>
-<li><a href="#">Essem paulo</a></li>
-<li><a href="#">Aeque fecto ii</a></li>
-<li><a href="#">Quo locis utens</a></li>
-</ul>
+{% load tag_cloud %}
+{% tag_cloud %}
<h3>Materias</h3>
<ul>
View
8 eisula/templates/tag_cloud.html
@@ -0,0 +1,8 @@
+<h3>Palabras Claves</h3>
+<ul>
+ {% for tag in tags %}
+ <li>
+ {{ tag.name }} ({{ tag.count }})
+ </li>
+ {% endfor %}
+</ul>
Something went wrong with that request. Please try again.