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?'