Использование свойства модели (список словарей) в качестве ввода для django format_html_join () дает keeerrorHtml

Программисты Html
Ответить
Anonymous
 Использование свойства модели (список словарей) в качестве ввода для django format_html_join () дает keeerror

Сообщение Anonymous »

Я пытаюсь использовать django format_html_join () util, чтобы вернуть историю версии форматированной HTML для одной из моих моделей. Но я не могу получить format_html_join () , чтобы принять мой список словарей.
Вот что предполагает документация:

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Html»