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