Как передать массив JavaScript в представления Django
Предыстория: Я пытаюсь создать небольшое веб-приложение, в котором мне нужно показывать данные на основе флажков, установленных пользователем. Я очень новичок в кодинге и почему-то решил начать с Django. Я сделал следующее:
- Я использовал HTML форму для чекбокса, который ничего не делает при отправке .
- JavaScript для валидации флажка и сбора пользовательского ввода в массив.
Я хочу передать эту переменную массива в Django views.py, чтобы попытаться отфильтровать данные и затем отобразить их пользователю, но я застрял. Я пробовал использовать Jquery (see result_output function), но не могу заставить его работать.
Ниже приведены коды. Любая помощь будет высоко оценена.
JavaScript:
function nextPrev(n)
{
// This function will figure out which tab to display
var x = document.getElementsByClassName("tab");
//exit the function if any checkbox is not checked
if(n==1 && !validateFrom(currentTab)) return false;
//console.log(all_filter_value[0])
//console.log(all_filter_value[1])
// Hide the current tab:
x[currentTab].style.display = "none";
document.getElementsByClassName("step")[currentTab].className += " finish";
// Increase or decrease the current tab by 1:
currentTab = currentTab + n;
// if you have reached the end of the form... :
if (currentTab >= x.length) {
//...the form gets submitted:
document.getElementById("questbox").style.display="none";
result_output();
return false;
}
all_filter_value = [];
function validateFrom(p)
{
var check = 0;
var Q = document.getElementsByClassName("tab");
console.log(Q.length)
var C = Q[p].getElementsByTagName("input");
console.log(C.length);
filter_var = [];
for(i=0; i < C.length; i++)
{
if(C[i].checked==true)
{
var picked_value= C[i].value
check=check+1;
filter_var.push(picked_value);
}
}
console.log(check)
//console.log(filter_var)
console.log(all_filter_value)
if(check==0)
return false
else
document.getElementsByClassName("step")[p].className += " finish";
all_filter_value.push(filter_var);
return true
}
function result_output()
{
document.getElementsByClassName("result_window")[0].style.display="block";
$(document).ready(function () {
var URL = "{% url 'homepage' %}";
var data = {'all_filter_value': all_filter_value};
$.post(URL, data, function(response){
if(response === 'success'){ alert('Yay!'); }
else{ alert('Error! :('); }
});
});
}
Views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import moviedb
import pandas as pd
def homepage(request):
movies = moviedb.objects.all().values()
df = pd.DataFrame(movies)
mydict = {
"df": df
}
if request.method == 'POST':
if 'all_filter_value' in request.POST:
all_filter_value = request.POST['all_filter_value']
return HttpResponse('success')
return render(request=request,
template_name="movierec/home.html",
context=mydict)