Foros del Web » Programando para Internet » Python »

Agregar Atributos a una Lista de enlaces.

Estas en el tema de Agregar Atributos a una Lista de enlaces. en el foro de Python en Foros del Web. Hola amigos Pythoneros (xD), paso por aqui aver si me pueden dar una idea Tengo un modelo simple con un titulo y un contenido, a ...
  #1 (permalink)  
Antiguo 02/11/2012, 06:48
 
Fecha de Ingreso: octubre-2012
Ubicación: Trujillo
Mensajes: 29
Antigüedad: 12 años, 1 mes
Puntos: 6
Agregar Atributos a una Lista de enlaces.

Hola amigos Pythoneros (xD), paso por aqui aver si me pueden dar una idea

Tengo un modelo simple con un titulo y un contenido, a este contenido se le envían cientos de enlaces sin las etiquetas <a href=""></a> es decir solo el enlace, entonces, la idea seria agregar una función para que cada enlace que empiece con http se le agregue las etiquetas de un link ejemplo:

Cita:
http://www.forosdelweb.com
http://www.gmail.com
Pasarlo así:
Cita:
<a href="http://www.forosdelweb.com">http://www.forosdelweb.com</a>
<a href="http://www.gmail.com">http://www.forosdelweb.com</a>
He estado creando una función, pero solo logro cambiarlo al primero a los demás no me les agrega los atributos.

Muchas Gracias.
  #2 (permalink)  
Antiguo 02/11/2012, 09:25
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Agregar Atributos a una Lista de enlaces.

Código Python:
Ver original
  1. import re
  2.  
  3. def urlfy(text):
  4.     url_pattern = re.compile(r'^https?://')
  5.     match = url_pattern.match(text)
  6.     if match:
  7.         return '<a href="%s">%s</a>' % (text, text)
  8.     else:
  9.         return text
  10.  
  11. print urlfy('https://www.google.com')
  12. print urlfy('Some text here')
  13. print urlfy('http://www.forosdelweb.com')
  14. print urlfy('http://gmail.com')

Lo puedes hacer con expresiones regulares, lamentablemente esto no garantiza que no tengas html injection.
  #3 (permalink)  
Antiguo 02/11/2012, 09:40
 
Fecha de Ingreso: octubre-2012
Ubicación: Trujillo
Mensajes: 29
Antigüedad: 12 años, 1 mes
Puntos: 6
Respuesta: Agregar Atributos a una Lista de enlaces.

Hola razpeitia, gracias por compartir, luego de leer varias paginas por google, he comprendido un poco mas y puedo explicarte mejor lo que se requiere.

Edito: Ya logre hacerlo funcionar, te dejo el código que realice.

Código Python:
Ver original
  1. from django.db import models
  2. class Post(models.Model):
  3.     contenido = models.TextField()
  4.  
  5.     def model_save(self):
  6.         lista = self.contenido.split()
  7.         for x in lista:
  8.             resultado = '<a href="%s">%s</a>' %(x,x)
  9.             self.contenido = result ado
  10.     super(Post, self).save()

Que opinas ahora mismo voy a ensañar el código tuyo. Saludos y Gracias.

Última edición por xcodex; 02/11/2012 a las 10:31 Razón: Funcionando.
  #4 (permalink)  
Antiguo 02/11/2012, 10:49
 
Fecha de Ingreso: octubre-2012
Ubicación: Trujillo
Mensajes: 29
Antigüedad: 12 años, 1 mes
Puntos: 6
Respuesta: Agregar Atributos a una Lista de enlaces.

Hola de nuevo, acabo de ver que hay un problema, porque cada vez que guardo el object en el admin vuelve y ejecuta el método save() duplicando todo de nuevo.

Gracias.
  #5 (permalink)  
Antiguo 02/11/2012, 14:55
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Agregar Atributos a una Lista de enlaces.

Puedes hacer un override del método save.

Pero en mi opinión te recomiendo que lo guardes así como viene, después si tienes que usar la url entonces hacerlo desde el template o desde un método que definas en tu modelo.

Ejemplo:
Código Python:
Ver original
  1. from django.db import models
  2.  
  3. class Post(models.Model):
  4.     contenido = models.TextField()
  5.  
  6.     def render_urls(self):
  7.         return ['<a href="{0}">{0}</a>'.format(url) for url in self.contenido.split()]
  #6 (permalink)  
Antiguo 02/11/2012, 15:24
 
Fecha de Ingreso: octubre-2012
Ubicación: Trujillo
Mensajes: 29
Antigüedad: 12 años, 1 mes
Puntos: 6
Respuesta: Agregar Atributos a una Lista de enlaces.

Cita:
Iniciado por razpeitia Ver Mensaje
Puedes hacer un override del método save.

Pero en mi opinión te recomiendo que lo guardes así como viene, después si tienes que usar la url entonces hacerlo desde el template o desde un método que definas en tu modelo.

Ejemplo:
Código Python:
Ver original
  1. from django.db import models
  2.  
  3. class Post(models.Model):
  4.     contenido = models.TextField()
  5.  
  6.     def render_urls(self):
  7.         return ['<a href="{0}">{0}</a>'.format(url) for url in self.contenido.split()]
Hola, vaya que me he perdido no he entendido tu código, ademas lo teste y me salen ['parametros']. Todo funciona perfecto pero solo que todo esta embebido entre [''], en verdad quede muy perdido jaja se nota que eres un crack men.

Muchas Gracias, Saludos.
  #7 (permalink)  
Antiguo 02/11/2012, 15:36
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Agregar Atributos a una Lista de enlaces.

Bueno, el metodo render_urls, te devuelve una lista de urls en la forma que pediste. Obviamente tienes que recorrer la lista, para que no te aparezca entre paréntesis (me imagino que tu template).

Igual si tienes las urls separadas por espacios o enters y los quieres volver a juntar puedes hacer lo siguiente:
Código Python:
Ver original
  1. return ''.join('<a href="{0}">{0}</a>'.format(url) for url in self.contenido.split())
  #8 (permalink)  
Antiguo 03/11/2012, 09:19
 
Fecha de Ingreso: octubre-2012
Ubicación: Trujillo
Mensajes: 29
Antigüedad: 12 años, 1 mes
Puntos: 6
Respuesta: Agregar Atributos a una Lista de enlaces.

Cita:
Iniciado por razpeitia Ver Mensaje
Igual si tienes las urls separadas por espacios o enters y los quieres volver a juntar puedes hacer lo siguiente:
Código Python:
Ver original
  1. return ''.join('<a href="{0}">{0}</a>'.format(url) for url in self.contenido.split())
Estuve mirando que "".join lo que hace es separar cada caracteres, estoy viendo la manera de en vez de omitir los espacios y enters lo deje tal cual viene. Porque sino quedaría todo junto pegado y la idea seria pasarle el filtro tag linenumbers.

Muchas Gracias Por tu Ayuda de verdad te lo agradezco.

Etiquetas: atributos, lista
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:17.