Python/Django f-strings интерпретирует строку в качестве входного сигнала

У меня нет идей, где искать.

Я пытаюсь создать строку, которая может быть отредактирована вне моего кода и сохранена пользователем, и чтобы эта строка передавалась в f-строку внутри моего кода.

Пример: Возьмем следующее значение, которое хранится в базе данных CharField: Hello {user}! How are you? Я хочу взять это значение и передать его в Python для обработки в качестве содержимого f-строки, такой что:

>>> user = 'Bob'
>>> stringFromOutside = 'Hello {user}! How are you?'
>>> print(f'{stringFromOutside}')
Hello {user}! How are you?

печатает "Hello Bob! How are you?"

Я слишком упростил для примера, потому что в этом суть того, где я заблудился.

  • Я пробовал вложить {stringFromOutside} во вторую f-строку, но это не сработало.
  • Я также пробовал двойное {{user}} внутри файла шаблона, но это не сработало.

Пользовательский пример на случай, если я просто тупой и делаю все неправильно
. У меня есть приложение, в котором я хочу предоставить администратору возможность писать шаблоны и сохранять их в базе данных. Шаблоны должны иметь возможность извлекать из севера различные объекты и все свойства этих объектов, так что было бы очень громоздко пытаться добавить замены вручную для каждой возможной переменной, которую может включать шаблон.

Вы можете использовать вложенную строку f и оценить ее:

user = 'Bob'
stringFromOutside = 'Hello {user}! How are you?'
print(eval(f"f'{stringFromOutside}'"))

Выход:

Hello Bob! How are you?
user = 'Bob'
stringFromOutside = "f'Hello {user}! How are you?'"
print(eval(stringFromOutside))

Вы можете попробовать следующее

Я не думаю, что здесь можно использовать f-string, но, я бы предпочел выбрать str.format(...)

In [3]: user = 'Bob'

In [4]: str_template = 'Hello {user}! How are you?'

In [5]: variables = {"user":user}

In [6]: str_generated = str_template.format(**variables)

In [7]: str_generated
Out[7]: 'Hello Bob! How are you?'

Вернуться на верх