如何从函数而不是视图加载django模板中的静态图像

How to load static images in a django template from function not from view

我正在使用 django 模板通过从函数而不是 view 提供上下文对象来生成 pdf,它在 view 的情况下工作正常,但我无法从函数加载模板上的本地静态图像。但这在视图中是可能的,因为在那里我可以告诉使用哪个基本路径。但是我无法在功能中做同样的事情。

如您所见,我知道如何从视图中获取基础 url。在这里我可以得到,因为我有 requests 对象但在功能上我没有任何 requests 对象。所以图片没有加载。

    html = HTML(string=html_string, base_url=request.build_absolute_uri('/'))

这就是我在函数中尝试做的事情:

    html_string = render_to_string('experiences/voucher.html', data)
    html = HTML(string=html_string, base_url=settings.STATIC_ROOT)
    result = html.write_pdf("file_new.pdf", stylesheets=[css],optimize_images=True)

我想知道我怎么知道我的图像在哪里,以便可以在 pdf 上呈现图像。

它不起作用,因为 base_url 无法知道图像的位置,尤其是在 运行 服务器上,所以我必须明确定义本地资源的路径,所以我做了是这样的: 首先,我在 .env 文件中添加了一个环境变量:

喜欢 HOST=http://localhost:8000 然后我在我的实际代码中得到这个 url 是这样的:

path = os.environ["HOST"]+"/static/"

最后我将此路径传递给 HTML()

中的 base_url 参数
html = HTML(string=html_string, base_url=path)

毕竟这一切都很有效。