首页 > 解决方案 > 将模板中的所有 url 动态替换为完整的绝对 url

问题描述

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

电子邮件中的内容将动态地来自数据库(使用 ckeditor 输入,因此我不能执行 {{ protocol }}{{ domain_name }}{% static '' %} 之类的操作。这仅适用于静态文件。但是,通过 ckeditor 上传的媒体内容将包含在媒体文件中,我完全无法控制它。

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

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

我想知道是否有更好的方法

标签: djangodjango-templates

解决方案


您可以使用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 }} />

推荐阅读