django - 将模板中的所有 url 动态替换为完整的绝对 url
问题描述
我有一个要作为电子邮件发送的模板。
因此,我需要有绝对完整的 url(连同协议和域名)而不是相对的。
电子邮件中的内容将动态地来自数据库(使用 ckeditor 输入,因此我不能执行 {{ protocol }}{{ domain_name }}{% static '' %} 之类的操作。这仅适用于静态文件。但是,通过 ckeditor 上传的媒体内容将包含在媒体文件中,我完全无法控制它。
我也不能使用 javascript,因为它是一个电子邮件模板。
目前我已经构建了一个 python 函数,它在渲染后扫描整个模板,并将协议和域名添加到img标记中的每个src属性和所有href属性。
我想知道是否有更好的方法
解决方案
您可以使用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 }} />
推荐阅读
- python - 如何从列表中调用信息?
- react-native - 使用带有 react-native 的 GooglePlacesAutocomplete 限制到多个国家
- javascript - Vue JS - 滚动时如何在左侧添加像素
- c++ - 如何将 GL_TEXTURE_2D_ARRAY 绑定到 GL_COLOR_ATTACHMENT1 上的帧缓冲区?
- excel - 将零添加到不完整的数字
- php - 如何在 laravel 中获得没有一个特定产品 ID 的所有产品类别?
- laravel - 如何转换 2021-05-24T04:44:56+00:00 格式的日期时间?
- javascript - 无法读取未定义反应复选框的“已检查”属性
- python - python函数中的运行时错误(列表,实践中的字符串混淆问题)
- azure - 在 ARM 模板 IPRestriction 中包含 Front Door ID