Почему, когда я пишуДжанго поля формы не оказывая при использовании пользовательского GetAttr templatetag
{% with "answer_1" as ans %}
{{ form|getattr:ans }}
{% endwith %}
Я получаю
<django.forms.fields.CharField object at 0x7fdea0f0a210>
в моем шаблоне, но когда я пишу
{{ form.answer_1 }}
Я получаю правильно обработанное текстовое поле?
Моего GetAttribute templatetag выглядит следующим образом:
@register.filter(name='getattr')
def getattribute(value, arg):
if hasattr(value, arg):
return getattr(value, arg)
elif hasattr(value, 'has_key') and arg in value:
return value[arg]
else:
return settings.TEMPLATE_STRING_IF_INVALID
Это очень важно для меня, чтобы быть в состоянии оказывать текстовые поля с помощью {% with %}
тега, так как моя форма содержит много ответов, и я хочу перебирать их и отобразить текстовое поле для каждого.
Любая помощь будет радушна. Заранее спасибо!
Проблема, вероятно, связана с вашим фильтром getattr, а не с использованием инструкции 'with'. Использование '{{form | getattr:" answer_1 "}}', вероятно, даст вам тот же результат, что и оператор 'with'. – Alasdair
Кроме того, это ваш настоящий код? Для связанной формы я ожидал бы 'hasattr (value, arg)' и 'hasattr (value, 'has_key')' для возврата False. Поэтому я ожидаю, что ваш фильтр вернет 'settings.TEMPLATE_STRING_IF_INVALID'. – Alasdair
@Alasdair Действительно, это то, что я тоже заметил. Мой фильтр возвращал «настройки».TEMPLATE_STRING_IF_INVALID', поэтому я добавил эту строку в метод '__init__' моего класса формы:' setattr (self, 'answer_% d'% i, self.fields ['answer_% d'% i]) '. Это неправильно? –