Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

341
Vistas
¿Cómo incluir la variable de contexto en un campo cms de lavandera?

Estoy buscando una forma de representar una variable que estará disponible en el contexto de la página donde se representará la página cms.

Ej: tengo en el contexto el usuario que inició sesión y también tengo la última transacción que realizó en el sitio web.

Me gustaría que el texto en el campo de texto enriquecido en Wagtail fuera así para que el equipo de marketing pueda modificar la copia.

Hola ||nombre|| Gracias por su compra. ||nombre del producto|| será enviado a usted pronto. La fecha de entrega prevista es ||expected_delivery_date||

Para ser menos confuso, reemplacé los corchetes dobles por tubos dobles para mostrar que el sistema de plantillas no necesita ser plantillas Django para esos. Las plantillas simples son suficientes, tal vez usando https://docs.python.org/3.4/library/string.html#template-strings Creo que puedo lograr esto haciendo:

  1. Un campo de flujo que tendría bloques de campo de texto enriquecido y un bloque personalizado con la posible variable de contexto que pueden usar
  2. Una función de representación personalizada que expresaría con expresión regular y reemplazaría las etiquetas de combinación en el bloque de texto enriquecido con los valores de contexto
  3. Cree un nuevo filtro para plantillas simples. ej: {{ página.cuerpo|texto enriquecido|plantilla simple}}

¿Hay alguna forma más obvia o lista para usar de crear plantillas desde un campo de texto enriquecido?

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Sería torpe con un bloque streamfield separado para cada variable de contexto insertada. Tendría que anular la representación predeterminada que envuelve elementos en etiquetas div . Sin embargo, me gusta que sea más infalible para los editores.

He hecho algo parecido a la representación personalizada antes, pero con TextFields simples para formatear mensajes de códigos de ofertas especiales. Los editores de Wagtail recibieron el siguiente texto de help_text para ilustrar:

 valid_placeholders = ['offer_code', 'month_price'] template_text = models.TextField( _('text'), help_text="Valid placeholder values are: {all_valid}. Write as {{{example}}}".format( all_valid=", ".join(valid_placeholders), example=valid_placeholders[0], ) )

Esto se representa como Los valores de marcador de posición válidos son: código_oferta, precio_mes. Escribir como {{offer_code}}.

Luego en la vista:

 template_keys = [i[1] for i in Formatter().parse(template_text)]

… y continuó renderizando desde allí. Recuerde validar el campo apropiadamente usando la función Formatter().parse() anterior también.

Usé el formato de plantilla de Django en lugar de string.format() de Python porque falla silenciosamente, pero podría usar string.format() si se limpia adecuadamente.

El filtro de plantilla personalizada me parecería más fácil, así que comenzaría con ese enfoque y cambiaría a una función de representación personalizada si me encontrara con obstáculos.

about 4 years ago · Santiago Trujillo Denunciar

0

Encontré una manera más fácil de hacer esto. Quería que mis editores pudieran crear páginas con personalización dinámica para el usuario individual. Con esto, mis editores pueden colocar variables de plantilla en cualquier tipo de bloque de contenido como {{ var }}, que funciona igual que el lenguaje de plantillas Django. Para mi caso de uso, permito que mis editores creen contenido de correo electrónico en el CMS y luego lo extraigo para enviar los correos electrónicos:

Esta es la función a llamar:

 def re_render_html_template(email_body, context): """ This function takes already rendered HTML anbd re-renders it as a template this is necessary because variables added via the CMS are not caught by the first rendering because the first rendering is rendering the containing block, so instead they are rendered as plaintext in content the first render, eg, {{ var }} Example: input: <p>Hey {{ user_account.first_name }}, welcome!</p> output: <p>Hey Brett, welcome!</p> @param email_body: html string @type email_body: str @param context: context dictionary @type context: dict @return: html string @rtype: str """ from django.template import Context from django.template import Template template = Template(email_body) context = Context(context) email_body = template.render(context) return email_body

Entonces lo llamo así:

 email_body = render_to_string(template, context) # need to re-render to substitute tags added via CMS email_body = re_render_html_template(email_body, context)
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda