Já fiz algo desse tipo, mas usei a formatação de strings antiga do python, substituindo os marcadores na string pelos valores de mesmo nome presentes no dict para formar o html estático e depois converter para pdf.
Um exemplo básico:
# Variável
nome = "Cleiton"
# Dicionário de substituição
dados = {'nome': nome}
# Estrutura básica do HTML com formatação
html_template = """
<!DOCTYPE html>
<html>
<head>
<title>Olá, Mundo!</title>
</head>
<body>
<h1>Bem-vindo, %(nome)s!</h1>
<p>Esta é uma página HTML simples.</p>
</body>
</html>
"""
# Substituição dos valores no template
html_final = html_template % dados
# Imprime o HTML resultante
print(html_final)
O % é chamado de "operador de formatação" e é usado para substituir marcadores de posição em uma string pelos valores de um dicionário ou tupla.