Как передать переменную из JavaScript в представлениях Django - PullRequest
3 голосов
/ 21 июня 2019

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

Я пытался использовать функции getlist и get в django, но не могу понять, как получить переменную.

<form method = "POST" name = "myForm" onsubmit = "return validateForm()">{% csrf_token %}

    <p>Entry Condtion:</p>
    <div id ="entry-parameters"></div>
    <button type="button" onclick= "add_entry_parameter()" class="btn btn-primary m-t-15 waves-effect">Add a new Entry Condition</button> 
    <button type= "button" onclick= "remove_entry_parameter()" class= "btn btn-primary m-t-15 waves-effect">Remove Entry Condtion</button>
    <br>

    <p>Exit Condtion</p>
    <div id = "exit-parameters"></div>
    <button type="button" onclick= "add_exit_parameter()" class="btn btn-primary m-t-15 waves-effect">Add a new Exit Condition</button> 
    <button type= "button" onclick= "remove_exit_parameter()" class= "btn btn-primary m-t-15 waves-effect">Remove Exit Condtion</button>
    <br>
    <br>
    <br>    
    <input type="submit" value="submit"  >

</form>

<script>
    var list = ['open' , 'close' , 'high', 'low'];
    var addField = document.getElementById('addField');
    parameters= document.getElementById('entry-parameters');
    exit_parameters= document.getElementById('exit-parameters');

    parameters.setAttribute("name" , "parameters" );
    exit_parameters.setAttribute("name" , "exit_parameters");

    function remove_entry_parameter()
    {
        parameters.removeChild(parameters.lastElementChild);
    }
    function add_entry_parameter()
    {

            var _form = document.body.appendChild(document.createElement('form')),
            _input = _form.appendChild(document.createElement('input')),
            _condition = _form.appendChild(document.createElement('input')),
            _input2 = _form.appendChild(document.createElement('input')),
            _datalist = _form.appendChild(document.createElement('datalist'));
            _cond_list = _form.appendChild(document.createElement('datalist'));


            _input.placeholder = "First Parameter";
            _input.list = 'exampleList';
            _input.setAttribute('list','exampleList')
            _input.datalist_id = 'exampleList';

            _input2.placeholder = "Second Parameter";
            _input2.list = 'exampleList';
            _input2.setAttribute('list','exampleList')
            _input2.datalist_id = 'exampleList';

            _condition.placeholder = "Condition";
            _condition.list = 'conditionList';
            _condition.setAttribute('list','conditionList')
            _condition.datalist_id = 'conditionList';

            _datalist.id = 'exampleList';
            _cond_list.id = 'conditionList';

            var list = ['open' , 'close' , 'high' , 'low' , 'vol'];
            var cond_list = ['greater than', 'less than' , 'crossed above' , 'crossed below', 'equal to'];



            for (var i = 0; i < list.length ; i++) {
                var _option = _datalist.appendChild(document.createElement('option'));
                _option.text =list[i];   
            };
            for (var i = 0; i < cond_list.length ; i++) {
                var _option = _cond_list.appendChild(document.createElement('option'));
                _option.text = cond_list[i];   
            };

            parameters.appendChild(_form);
    }
// I've written a similar code for exit_parameters
</script>


def get_data(request):
    if request.method == 'POST':
        entry_data = request.POST.get('parameters')
        exit_data = request.POST.get('exit_parameters')
        print(entry_data)
        print(exit_data)

    return render(request, 'get_data.html' , {})

1 Ответ

1 голос
/ 21 июня 2019

Ваша функция add_entry_parameter начинается с создания новой формы на странице.Вы почти наверняка хотите одну форму на странице - не нужно создавать новые.

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

После того, как вы убедились, что значение в существующем поле с уникальным именем обновляется, когда пользователь делает выбор, оно должно появиться в POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...