Рендеринг форм Django на вкладке EXTJS - PullRequest
1 голос
/ 12 декабря 2010

Мне удалось успешно обработать мою первую форму django на вкладке extjs.Данные формы отображаются правильно, и проверка формы, кажется, работает правильно.

Моя проблема в том, что django хочет отобразить всю новую страницу, а не просто переместить результаты обратно на ту же вкладку.Я думаю, что мое приложение будет работать лучше, если я смогу хранить все это на одной вкладке без полного рендеринга страницы.

Справочная информация: Я использовал пример вкладки EXTJS ajax, чтобы заставить это работать.Тогда единственная проблема состоит в том, что в примере не было нескольких вызовов get / post, отображаемых на одной вкладке, поэтому я не уверен, как это сделать.

Вопрос: Как сохранить результаты данных POST на вкладке EXTJS?Кроме того, от экспертов, которые разрабатывают много этих приложений, я использую правильный шаблон здесь?

Вот мой основной макет:

Файл: grid.js - СборкиВ сетке EXTJS пользователь нажимает значок «Изменить», который вызывает django, чтобы получить форму редактирования.

  var createColModel = function (finish, start) {

  var columns = [{
      dataIndex: 'pk',
      header: 'Student ID',
      filterable: true
      //,filter: {type: 'numeric'}
  }, {
   // ... More column data here
  },{
      header: 'Actions',
      id: 'actions',
      xtype: 'actioncolumn',
      width: 50,
      items: [{
           icon   : '/site_media/icons/application_edit.png',  
           tooltip: 'Edit Record',
           handler: function(grid, rowIndex, colIndex) {
               var rec = studentStore.getAt(rowIndex);
               mainTabPnl.add({
                   title: rec.get('fields.first_name') + ', ' + rec.get('fields.last_name'),
                   iconCls: 'tabs',
                   autoLoad: {url: '/app/edit_student/' + rec.get('pk')}, 
                   closable:true
               }).show();
           }
       }]
  }];

Файл: views.py

 def edit_student_view(request, sid):
   print "Edit Student: " + sid
   student = Student.objects.get(pk=sid)
   if request.method == 'POST': 
     form = StudentProfileForm(request.POST, instance=student) 
     if form.is_valid(): 
       student=form.save() 
       message="Edit successful"
       c = {'form' : form, 'student':student, 'message':message}
       return render_to_response('app/edit_student.html', c, context_instance=RequestContext(request)) 
     else:
       message = "The form contains errors."
       c = {'form':form, 'student':student, 'message':message}
       // Problem: This is now rendered as the whole page, not inside the tab
       return render_to_response('app/edit_student.html', c, context_instance=RequestContext(request)) 
   else:
     form = StudentProfileForm(instance=student) 
     c = {'form':form, 'student':student}
   //Initial GET: renders in correct EXTJS window.
   return render_to_response('app/edit_student.html', c, context_instance=RequestContext(request)) 

Файл: edit_student.html - отображает форму django

 {% block mainpanel %}

 {% if form.errors %}
   <p>The Registration form had errors. Please try again.</p>
 {% endif %}

 {% if form %}
 <form action="/app/edit_student/{{student.student_id}}/" method="post">
    <table>
    {{ form.as_table }}
   </table>
   <input type="submit" value="Submit" />
 </form>
 {%endif%}

 {% endblock %}

1 Ответ

1 голос
/ 12 декабря 2010

Если вы хотите сохранить его на вкладке, вам нужно отказаться от стандартных механизмов HTML-форм и вместо этого установить на кнопке событие onclick для выполнения POST через AJAX.

...