formatear a html datos y links dentro de un campo mysql

Alexis Roda alexis.roda.villalonga en gmail.com
Lun Jun 16 20:29:00 CEST 2008


En/na punchik punchik ha escrit:
> hola amigos, tengo dos preguntas: 
>  tengo una base de datos en mysql  , la base de datos de una tabla con un diccionario, osea dos campos, la palabra y su descripcion, luego hize un pequeno script en python que va en el servidor y lee de un pagina web via formularios la palabra que la gente intruduce y luego conecta con la base de datos e imprime como html el resultado. La pregunta que tengo es, mis descripciones son bastantes largas y me gustaria que el html que se genera con la descripcion respete los saltos de lineas, para que se vea mas ordenado, ya que el script de python imprime todo , sin respetar salto de lineas.  como podria hacer esto?
> 

Tienes que incluir etiquetas HTML. Puedes probar con algo como:

for parrafo in definicion.split('\n') :
   print "<p>%s</p>" % parrafo

> ademas me gustaria que si aparece en mi descripcion alguna palabra que   tambien esta en el campo  "palabra"   que se formatee como hiperlink o link para darle click y ver la descripcion de esa palabra sin tener que estar regresando y tipeando la palabra en el formulario.

Esto es mas complicado de implementar bien.

La idea básica es iterar sobre la definición palabra por palabra, 
buscarla en la base de datos y dependiendo de si existe o no generar 
código HTML para un link o texto. Algo como:

import re
separador = re.compile('\W+')

def existe_palabra(palabra) :
   # busca la palabra en la base de datos, si la encuentra
   # devuelve True, sino False

for palabra in separador.split(definicion) :
   if existe_palabra(palabra) :
     print "<a href="URL?termino=%s">%s</a>" % (palabra, palabra)
   else :
     print palabra

Tiene varios problemas:

1. la palabra debe coincidir exactamente con lo que hay en la base de 
datos. Si el texto dice "casas" y en la BD dice "casa" no la encontrará 
y no generará el link.

2. tal como lo he puesto en el ejemplo se pierden los saltos de linea

3. es muy ineficiente, cada palabra requiere una consulta a la base de 
datos.

4. si una misma palabra aparece dos veces requiere dos consultas.


Personalmente me gusta la solución para 3 i 4 de:

http://dictionary.cambridge.org/define.asp?key=75675&dict=CALD
http://ec.grec.net/lexicx.jsp?GECART=0007813

si haces doble click sobre una palabra se dispara una búsqueda. De esta 
forma solo compruebas si existe una palabra cada vez, si existe muestras 
la definición y sino un mensaje de error.




Saludos
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es