gpt4 book ai didi

python - 如何在电子邮件中设置 Markdown 的默认样式

转载 作者:行者123 更新时间:2023-12-01 04:34:08 27 4
gpt4 key购买 nike

我正在使用Django-Markdown-deux呈现电子邮件模板的 HTML。

考虑以下输入:

# Heading 1
Text goes here

这将呈现为:

<h1>Heading 1</h1>
<p>Text goes here</p>

有没有办法为每个元素添加默认样式?注意样式需要内联,因为这是电子邮件。例如:

<h1 style="color:#eee;font-family:'Helvetica Neue'">Heading 1</h1>

最佳答案

这不是 Markdown 本身可以完成的事情。然而,有一些 Python 库将接受 HTML 输入(和一些 CSS)并使用内联样式输出重新格式化的 HTML(如 these answers 指出的)。因此,您需要获取 Markdown 的输出并将其传递到这些库之一。

当您使用 Django 模板过滤器(我假设该过滤器而不是 Deux 提供的标签)将 Markdown 渲染为 HTML 时,您将需要创建第二个过滤器来包装 CSS 内联库之一,并将 Markdown 过滤器的输出传递到您的自定义过滤器。您的自定义过滤器可能看起来像这样(未经测试):

from django import template
from django.utils.safestring import mark_safe
from pynliner import Pynliner

register = template.Library()

@register.filter(name="html2email")
def pynliner_filter(value):
css = "h1 {color:#eee; font-family:'Helvetica Neue'}"
p = Pynliner()
return mark_safe(p.from_string(value).with_cssString(css).run())

然后,在您的模板中,您将执行以下操作:

{{ myvar|markdown|html2email }}

有趣的是,我在过滤器中对 CSS 进行了硬编码。将其扩展为可定制是留给读者的练习。有关创建和加载自定义模板过滤器的更多具体信息,请参阅 Django's docs .

<小时/>

如果您在模板中定义了样式(在 <style> 标签中),那么这些样式可能需要应用于整个文档(而不仅仅是 Markdown 生成的部分)。请注意,内联工具将接受完整的 HTML 文件(其中定义了 CSS)并输出内联了这些样式的文件。如果这是您的情况,那么您将不需要使用自定义模板过滤器。相反,渲染模板后,您需要通过 Django View 中的内联工具传递 HTML 文档。也许是这样的:

def someview(...)
# Do your pre-template stuff here ...
html = template.render()
p = Pyliner()
email_body = p.from_string(html).run()
# Send your email here (or whatever you are doing) ...

由于没有关于您的具体情况的更多信息,上面的代码遗漏了很多内容。仅解决与此特定问题相关的部分。工作观点还有很多。不过,如果您已经有一个工作 View ,那么您可能只需要用上面显示的几行替换渲染模板的行。

关于python - 如何在电子邮件中设置 Markdown 的默认样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32015901/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com