将所有网址动态替换为模板中的完整绝对网址

时间:2019-01-23 19:19:10

标签: django django-templates

我有一个要作为电子邮件发送的模板。
因此,我需要使用绝对完整的URL(以及协议和域名),而不是相对的完整URL。

电子邮件中的内容将动态地来自数据库(使用ckeditor输入,所以我不能做类似{{协议}} {{domain_name}} {%static% }。这仅适用于静态文件,但是通过ckeditor上传的媒体内容将存储在媒体文件中,而我对此绝对没有控制权。

我也不能使用JavaScript,因为它是电子邮件模板。

当前,我已经构建了一个python函数,可在渲染后扫描整个模板,并将协议和域名附加到 img 标签和所有中的每个 src 属性中href 属性。

我想知道是否存在更好的方法

1 个答案:

答案 0 :(得分:0)

您可以使用request.build_absolute_uri并制作一个自定义模板标签,以便在呈现邮件模板时使用。

示例

#templatetags/url_helper.py
@register.simple_tag()
def full_uri(request, relative_url):
    return request.build_absolute_uri(realtive_url)

然后...

{# Some template.html #}
{% full_uri request some_img.url as full_img_url %}

<img src={{ full_img_url }} />