Bir Django template html dosyası içinden sayfadan ayrılmadan bir view fonksiyonu çağırarak dönüş değerini almak istiyorsanız alttaki kodları kullanmanız yeterli olacaktır.
Kısaca açıklayacak olursak. Html içinde script tagleri arasındaki kod bir form select alanında bir seçim yapıldığında devreye girerek seçilen değer için get-student-courses view ına istek gönderiyor. Bu view ise gelen isteği değerlendirip bazı çıktıları üreterek bunları bir list içine yerleştirerek bir json.dump olarak HttpResponse olarak Html sayfasındaki scripte geri dönüyor. Script aldığı Json datasını parse ederek sorgulanan bilgileri scripte sağlamış oluyor. Django 2.2 ve Python 3.6 kullanılmıştır.
Html :
Bunun yerine alttakini kullanın.
Html :
<-----script>
var select_student = function()
{
var selectit = document.getElementById(this.id);
var studentid = selectit.options[selectit.selectedIndex].value;
var elementidlist = this.id.split("-");
var elementid = elementidlist[1];
$.get('/get-student-courses/', {student_id: studentid}, function(data){
obj = JSON.parse(data);
var innerhtmlx = "";
for (i = 0; i < obj.length; i++) {
var res = obj[i].split("-");
var coursecode = res[0];
var coursename = res[1];
innerhtmlx = innerhtmlx + "";
}
var courseselect = document.getElementById('id_form-'+elementid+'-course');
courseselect.innerHTML = innerhtmlx;
});
}
for (i = 0; i < {{ formcount }}+1; i++) {
document.getElementById('id_form-'+i+'-student').onchange = select_student;
}
<----- script="">
----->-----script>
View :
def get_student_courses(request):
student_id = 0
if request.method == 'GET':
student_id = request.GET['student_id']
courseobjects = Courses.objects.all()
studentobject = Student.objects.get(std_no=student_id)
list = []
for course in courseobjects:
coursestudentobject = course.student.filter(std_no=int(student_id))
if coursestudentobject.count() != 0:
crscode = course.coursecode
crsname = CourseNames.objects.get(uuid=course.coursename_id)
discount_course_count = StudentDiscount.objects.filter(course_id=crscode,student_id=student_id).count()
if discount_course_count == 0:
list.append(str(crscode)+"-"+str(crsname))
jsonlist = json.dumps(list)
return HttpResponse(jsonlist)
Not :
Alttaki slim jqueryi kullanmayın.
<-----script crossorigin="anonymous" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" src="https://code.jquery.com/jquery-3.3.1.slim.min.js"><----- script="">
----->-----script>
Bunun yerine alttakini kullanın.
<-----script src="https://code.jquery.com/jquery-3.1.1.min.js"><----- script="">
----->-----script>
Hiç yorum yok:
Yorum Gönder