¿Puedo posponer / aplazar la evaluación de las cadenas f?

Estoy usando cadenas de plantillas para generar algunos archivos y me encanta la concisión de las nuevas cadenas f para este propósito, para reducir mi código de plantilla anterior de algo como esto:

template_a = "The current name is {name}"
names = ["foo", "bar"]
for name in names:
    print (template_a.format(**locals()))

Ahora puedo hacer esto, reemplazando directamente las variables:

names = ["foo", "bar"]
for name in names:
    print (f"The current name is {name}")

Sin embargo, a veces tiene sentido tener la plantilla definida en otro lugar, más arriba en el código, o importada de un archivo o algo así. Esto significa que la plantilla es una cadena estática con etiquetas de formato.. Algo debería sucederle a la cadena para decirle al intérprete que interprete la cadena como una nueva cadena f, pero no sé si existe tal cosa.

¿Hay alguna manera de traer una cadena y hacer que se interprete como una cadena f para evitar el uso de.format(**locals()) ¿llamada?

Idealmente, quiero poder codificar así ... (dondemagic_fstring_function es donde entra la parte que no entiendo):

template_a = f"The current name is {name}"
# OR [Ideal2] template_a = magic_fstring_function(open('template.txt').read())
names = ["foo", "bar"]
for name in names:
    print (template_a)

... con esta salida deseada (sin leer el archivo dos veces):

The current name is foo
The current name is bar

... pero el resultado real que obtengo es:

The current name is {name}
The current name is {name}

Respuestas a la pregunta(3)

Su respuesta a la pregunta