Мне удалось успешно обработать мою первую форму 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 %}