2013-12-10 2 views
0

У меня есть dict форм, что мой шаблон получает:В шаблоне Django, как мне получить доступ к атрибутам элемента dict, чей ключ имеет пробел?

forms = {'Cholera': CholeraForm(), 'Foot And Mouth Disease': FootMouthDiseaseForm()} 

Плана для отображения каждого ключа в select элементе формы, и в зависимости от выбранного значения, я покажу правильную форму. Доступ к dict элементам, которые имеют пробелы в ключе является достаточно простая задача, решается с помощью тэга:

@register.filter 
def get(value, arg): 
    """ 
      Template tag used for getting the value out of a dict when the key has whitespace. 
    """ 
    return value[arg] 

Это позволяет мне получить форму, как это:

{{ forms|get:'Foot And Mouth Disease' }} 

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

{{ forms|get:'Foot And Mouth Disease'.element }} 

или это:

{{ (forms|get:'Foot And Mouth Disease').element }} 

Но ни работы. Я получаю TemplateSyntaxErrors для каждого. Как я могу получить доступ к определенному элементу формы формы, доступной таким образом?

+1

Я думаю, что шаблон отобразит форму в html. Лучше всего назначить каждую форму другой переменной или выполнить любую логику в view.py, если вы планируете отображать только одну конкретную форму для этой страницы. –

+0

Я определенно открыт для этого, но я не совсем уверен, как это сделать. Вид не знает, какую форму он будет отображать. Основная идея заключается в том, что пользователь этого приложения может выбрать болезнь, и в зависимости от выбранной ими болезни необходимо задать другой набор вопросов. – Geoff

+1

Это можно сделать обычным html-страничным способом, где выбор конкретной болезни будет перенаправлен на другую страницу с этой конкретной формой. Кроме того, вы можете использовать некоторые ajax для динамического изменения формы на одной странице. Какое бы ни было ваше требование или вам более комфортно. –

ответ

1

Вы можете использовать with:

{{ with forms|get:'Foot And Mouth Disease' as item }} 
{{ item.element }} 
{{ endwith }} 

Но лучший способ может быть, чтобы изменить свой фильтр в тег назначения, который добавляет элемент в контексте непосредственно.

Смежные вопросы