Вот что предполагает документация:
Код: Выделить всё
format_html_join(
"\n",
'[*]{id} {title}',
({"id": b.id, "title": b.title} for b in books),
)
< /code>
Этот третий аргумент предназначен для того, чтобы быть:
args_generator должен быть итератором, который дает аргументы для передачи в format_html (), любые последовательности позиционных аргументов или сопоставления аргументов ключевых слов. Я подумал, что список словарей иерсен. Я также думаю, что должен быть способ использовать список словарей в утилите, который ожидает список словарей без необходимости воссоздания списка словари. Вот метод модели, который я должен получить, чтобы получить историю версий: < /p>
@property # I have tried this as a property and not as a property, neither works
def get_version_history(self):
versions = Version.objects.get_for_object(self)
version_history = []
for version in versions:
history_fields = version.field_dict
hdict = {"question": history_fields['question'],
"answer": history_fields['answer'],
"user": version.revision.user.username,
"timestamp": version.revision.date_created.strftime("%Y-%m-%d %H:%M"),
}
version_history.append(hdict)
return version_history
< /code>
Этот метод возвращает что -то вроде этого: < /p>
[{'question': "I'm out of questions",
'answer': 'bye',
'user': 'test.supervisor',
'timestamp': '2025-07-31 20:19'},
{'question': "I'm out of questions",
'answer': 'me too',
'user': 'test.supervisor',
'timestamp': '2025-07-31 20:18'},
{'question': "I'm out of questions",
'answer': '',
'user': 'test.supervisor',
'timestamp': '2025-07-31 20:18'}]
< /code>
Теперь я пытаюсь вернуть форматированную версию HTML этого списка словарей: < /p>
def version_html(self):
html = format_html_join(
"\n",
"""
{question}
{answer}
{user}
{timestamp}
""",
self.get_version_history
)
return html
< /code>
Приведенный выше код возвращает эту ошибку: < /p>
File ~/.virtualenvs/cep/lib/python3.12/site-packages/django/utils/html.py:112, in format_html(format_string, *args, **kwargs)
110 args_safe = map(conditional_escape, args)
111 kwargs_safe = {k: conditional_escape(v) for (k, v) in kwargs.items()}
--> 112 return mark_safe(format_string.format(*args_safe, **kwargs_safe))
KeyError: 'question'
< /code>
Я пробовал различные вещи для третьего аргумента, все с различными ошибками: < /p>
self.get_version_history
self.get_version_history()
**self.get_version_history
**self.get_version_history()
{"question": v.question, "answer": v.answer, "user": v.user, "timestamp": v.timestamp,} for v in self.get_version_history())
({"question": v['question'], "answer": v['answer'], "user": v['user'], "timestamp": v['timestamp']} for v in self.get_version_history())
{"question": v.question, "answer": v.answer, "user": v.user, "timestamp": v.timestamp,} for v in self.get_version_history)
({"question": v['question'], "answer": v['answer'], "user": v['user'], "timestamp": v['timestamp']} for v in self.get_version_history)
(d for d in self.get_version_history)
(d for d in self.get_version_history())
[d for d in self.get_version_history]
[d for d in self.get_version_history()]
Подробнее здесь: https://stackoverflow.com/questions/797 ... format-htm