Django 多模板继承

Posted

技术标签:

【中文标题】Django 多模板继承【英文标题】:Django Multiple template inheritance 【发布时间】:2013-01-09 12:39:51 【问题描述】:

我的情况很简单:

我有一个文本/普通邮件模板:body.txt 另一个用于 text/html 邮件:body.html

这两封邮件的内容是一样的,因为我使用的是EmailAlternative,在同一封邮件中发送。

body.txt

% block message %% endblock %

 site_name  team
-----------------
If you need help contact use at  support_mail 

body.html

<html>
    <head>
        <title>% block title %% endblock %</title>
    </head>
    <body>
        <p>% filter linebreaksbr %% block message %% endblock %% endfilter %</p>
        <p><strong> site_name  team</strong></p>
        <hr/>
        If you need help contact use at <a href="mailto: support_mail "> support_mail </a>
    </body>
</html>

当然,翻译、css和不止一个块会稍微复杂一些。

我的愿望是定义invitation.txt

% block message %Dear  first_name|title   last_name|upper ,

Your inscription has bee accepted. Welcome!
% endblock %

我希望能够加载(body.txt、invitation.txt)和(body.html、invitation.txt)来获取我的两个 html 部分。

编辑:

类似的东西:

invitation/body.txt

% extends body.txt invitation.txt %

invitation/body.html

% extends body.html invitation.txt %

【问题讨论】:

另一个想法:% if html %% extends base.html %% else %% extends base.txt %% endif % 【参考方案1】:

您可以使用include

例如: invitation.txt

Dear  first_name|title   last_name|upper ,

Your inscription has bee accepted. Welcome!

invitation/body.txt

% extends body.txt %
% block message %
% include "invitation.txt" %
% endblock %

invitation/body.html

% extends body.html %
% block message %
% include "invitation.txt" %
% endblock %

【讨论】:

【参考方案2】:

您可以在上下文中设置一个变量并将其传递给extends模板标签。

ininvitation.txt:

% extends base %
% block message %Dear  first_name|title   last_name|upper ,

Your inscription has been accepted. Welcome!
% endblock %

使用上下文'base': 'body.txt' 渲染invitation.txt,然后使用上下文'base': 'body.html'

【讨论】:

以上是关于Django 多模板继承的主要内容,如果未能解决你的问题,请参考以下文章

模板继承与导入

django-模板文件继承

[py]django模板继承

Django模板——模板继承

Django模板继承和引用

Django模板的继承