2010-01-14 3 views
1

У меня возникли проблемы с выяснением путей решения этой проблемы Django и (возможно) способом Python. Я посылаю хэш в шаблон, который содержит следующие значенияГенерация полей динамической формы в шаблонах Django

{'date': '2009-12-30', 'locations': [{u'lat': 43.514000000000003, u'lng': -79.844032999999996, u'place': u'1053 Bowring Cres, Milton, ON L9T, CA', u'description': u'Home base'}, {u'lat': 43.730550000000001, u'lng': -79.805334000000002, u'place': u'50 Dawnridge Trl, Brampton, ON L6Z, CA', u'description': u'Southfork'}]} 

Я затем передать эти данные в шаблон, и мне нужно сделать следующее:

  • создать форму
  • пре- заполнить ряд полой формы, связанные со значениями в «места»
  • , если у меня есть надстройка менее чем в 5 «местоположений» ряд пустой полой формы, пока я не 5

Вот код, который тянет и генерирует данные - он захватывает информацию от CouchDB

def get_by_id(self, username, search_id): 
     if username and search_id: 
      info = db.get(search_id) 

      if info['user'] == username: 
       return {'date': info['date'], 
         'locations': json.loads(info['locations'])} 

Я полагаю, я мог бы как-то управлять тем, что в информации [ «место»] добавить в ID, но я «Мы боролись с пониманием того, как Python обрабатывает итерацию через JSON.

Вот код в шаблоне, который я использую для создания формы. my_search содержит данные, я показал выше

<form method="post" action="/locations"> 
<input type="hidden" name="search_id" value="{{ search_id }}"> 
    <table> 
     <tr> 
      <th>Location</th> 
      <th>Description</th> 
     </tr> 
     {% for location in my_search.locations %} 
     <tr> 
      <td><input type="text" name="location" id="id_location" 
         value="{{ location.place }}"></td> 
      <td><input type="text" name="description" id="id_description" 
         value="{{ location.description }}"></td> 
     </tr> 
     {% endfor %} 
    </table> 
    <input type="submit" value="Update Plan"> 
    </form> 

Мысли о том, как (а) легко добавить в уникальном идентификаторе и (б) добавить недостающие пары пустых полей формы, если у меня меньше, чем 5 мест было бы очень оценили.

ответ

2
if info['user'] == username: 
    locations = (json.loads(info['locations']) + 
    [{'place': '', 'description': ''}] * 5)[:5] 

    return {'date': info['date'], 'locations': locations} 
+0

Я правильно предполагая, что [: 5] часть говорит: "сделать это, пока мы не имеем 5 элементов в массиве"? – GrumpyCanuck

+0

Это означает «дать мне пятый элемент последовательности». http://docs.python.org/tutorial/introduction.html#lists –

2

()

id="id_location_{{ forloop.counter }}" 
+0

Это сработало отлично. – GrumpyCanuck

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