Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何设置电子邮件中标记的默认样式_Python_Django_Templates_Markdown - Fatal编程技术网

Python 如何设置电子邮件中标记的默认样式

Python 如何设置电子邮件中标记的默认样式,python,django,templates,markdown,Python,Django,Templates,Markdown,我使用呈现电子邮件模板的HTML 考虑以下输入: # Heading 1 Text goes here 这将导致: <h1>Heading 1</h1> <p>Text goes here</p> 标题1 这里有文字 有没有办法为每个元素添加默认样式?注意样式需要内联,因为这是电子邮件。例如: <h1 style="color:#eee;font-family:'Helvetica Neue'">Heading 1</h1&

我使用呈现电子邮件模板的HTML

考虑以下输入:

# Heading 1
Text goes here
这将导致:

<h1>Heading 1</h1>
<p>Text goes here</p>
标题1
这里有文字

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

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

这不是降价本身可以做到的事情。然而,有些Python库将接受HTML输入(和一些CSS),并输出带有内联样式的重新格式化HTML(如前所述)。因此,您需要获取Markdown的输出并将其传递到这些库中的一个

当您使用Django模板过滤器(我假设该过滤器而不是Deux提供的标记)将标记呈现为HTML时,您需要创建第二个过滤器,该过滤器包装其中一个CSS内联库,并将标记过滤器的输出传递给自定义过滤器。您的自定义筛选器可能如下所示(未经测试):

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

{{ myvar|markdown|html2email }}
值得注意的是,我在过滤器中对CSS进行了硬编码。将其扩展为可定制的,留给读者作为练习。有关创建和加载自定义模板筛选器的详细信息,请参阅


如果在模板中定义了样式(在
标记中),那么这些样式可能需要应用于整个文档(而不仅仅是通过标记生成的部分)。请注意,内联工具将接受一个完整的HTML文件(其中定义了CSS),并输出一个内联了这些样式的文件。如果这是您的情况,那么您将不需要使用自定义模板过滤器。相反,在呈现模板之后,需要通过Django视图中的内联工具传递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) ...

如果没有关于您的具体情况的更多信息,上面的代码会遗漏很多内容。仅涉及与此特定问题相关的位。有一个工作视图还有很多。尽管如此,如果您已经有一个工作视图,那么您可能只需要将呈现模板的行替换为上面显示的几行。

在复制到电子邮件客户端之前,标记是由电子邮件客户端呈现还是由其他工具呈现?在这两种情况下,了解您正在使用哪个工具将标记呈现为HTML可能会有所帮助?如果“django”标记表示您正在从django内部寻找一个可使用的解决方案,那么您可能希望将其标记为“Python”。如果是这样的话,那么这是的一个副本,它指向几个可能解决此问题的不同Python库。@Waylan谢谢,我使用Django Markdown Deux作为过滤器,因此使用Django tagThanks,这是一个很好的解决方案。如果我想将模板中的
应用于过滤器而不是硬编码的CSS,我从哪里开始?@alias51我在回答中添加了一个部分,介绍如何在模板中应用
标记中定义的样式。
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) ...