Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

342
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda