django 静态文件未提供给 HTML-EMail 模板

问题描述 投票:0回答:2

我正在 Win7 主机上的本地 Vagrant arch 机器上运行 Django。我在 .env 文件中从 Django 设置了环境变量。在我的应用程序中,所有静态文件均正确提供,并且一切正常。

问题:我无法在 html 电子邮件模板中提供静态文件(图像)。到目前为止,我将它们作为硬编码的文件管理器 URL 提供,我想更改它。

我正在传递 BASE_URL

BASE_URL=http://127.0.0.1:8001
,这已被证明是有效的,作为模板的上下文并像往常一样加载静态:

{% load static %} 

并在 HTML 标签中调用它:

<img src="{{BASE_URL}}{% static 'img/my_image.png' %}">

在收到的电子邮件中,图像的 URL 为 http://127.0.0.1:8001/static/img/my_image.png 看起来正确,但会触发 404。

我错过了什么??

(请不要问我图片是否在相应的文件夹中,是的;)

django static django-templates html-email django-cms
2个回答
7
投票

正如@dentemm已经说过的:您的电子邮件服务提供商尝试从http://127.0.0.1:8001/static/img/my_image.png获取图像,但他不能,而您的服务器地址只能从您的本地可见电脑。因此找不到图像。解决此问题的一种方法是渲染模板并截取模板的屏幕截图并将其发送到电子邮件正文中(以查看它是否正确渲染) 这里

另一种方法是将 img 文件上传到一些可公开访问的服务器。


0
投票

一个有效且速度更快的出色解决方案是在渲染 html 模板时将服务器 URL 作为上下文传递。你可以从

django.contrib.sites.shortcuts
得到它。

示例

from django.contrib.sites.shortcuts import get_current_site

site = get_current_site(request)
message = render_to_string(template, {
    "domain": site.domain,
})
© www.soinside.com 2019 - 2024. All rights reserved.