Получение данных из csv в html форму на flask

arch1tect

Новичок
Пользователь
Май 17, 2020
7
0
1
У меня есть файл csv, я могу читать его построчно, и получать только одно значение ячейки в каждый `input` из 5 как на картинке. 5 inputs

Сейчас же у меня есть один `input` и мне нужно добавить в него уже 5 значений картинка с 1-м input-ом , как например когда мы добавляем или удаляем теги на форуме чтобы вопрос задать, по такому типу. В кратце так:

У меня есть html форма. Я хочу получать через запятую 5 ячеек из первой строки моего .csv файла, а получаю только одну. Как еще 4 получать?

Помогите с решением, не знаю где ошибка в коде. Спасибо.

Код здесь
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
У меня есть файл csv, я могу читать его построчно, и получать только одно значение ячейки в каждый `input` из 5 как на картинке. 5 inputs

Сейчас же у меня есть один `input` и мне нужно добавить в него уже 5 значений картинка с 1-м input-ом , как например когда мы добавляем или удаляем теги на форуме чтобы вопрос задать, по такому типу. В кратце так:

У меня есть html форма. Я хочу получать через запятую 5 ячеек из первой строки моего .csv файла, а получаю только одну. Как еще 4 получать?

Помогите с решением, не знаю где ошибка в коде. Спасибо.

Код здесь
В шаблоне нужно было чтобы атрибут list у input`а совпадал с id datalist`а. Вот исправленный шаблон:
HTML:
<body>
{% block body%}
<form name="CheckForm" method="POST" action="/result"> 
  <div class="wrap">
     <div class="search">
        <input type="text" list="val" multiple="multiple" class="searchTerm" name="value" placeholder="Type your value">
        <datalist id="val">
          {% for val in values %}
          <option value="{{val}}">{{val}}</option>
          {% endfor %}
        </datalist>
        <button type="submit" class="searchButton" name=form>
          <i class="fa fa-search"></i>
       </button>
     </div>
  </div>
</form>
{% endblock %}
</body>
 

arch1tect

Новичок
Пользователь
Май 17, 2020
7
0
1
В шаблоне нужно было чтобы атрибут list у input`а совпадал с id datalist`а. Вот исправленный шаблон:
HTML:
<body>
{% block body%}
<form name="CheckForm" method="POST" action="/result">
  <div class="wrap">
     <div class="search">
        <input type="text" list="val" multiple="multiple" class="searchTerm" name="value" placeholder="Type your value">
        <datalist id="val">
          {% for val in values %}
          <option value="{{val}}">{{val}}</option>
          {% endfor %}
        </datalist>
        <button type="submit" class="searchButton" name=form>
          <i class="fa fa-search"></i>
       </button>
     </div>
  </div>
</form>
{% endblock %}
</body>
 

arch1tect

Новичок
Пользователь
Май 17, 2020
7
0
1
не помогло, я все равно могу выбирать только один элемент списка.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
не помогло, я все равно могу выбирать только один элемент списка.
Теперь в выпадающий список попадают все переданные элементы, а до этого только один. Вот тут есть пример с выбором нескольких элементов из выпадающего списка: ссылка
 

arch1tect

Новичок
Пользователь
Май 17, 2020
7
0
1
Теперь в выпадающий список попадают все переданные элементы, а до этого только один. Вот тут есть пример с выбором нескольких элементов из выпадающего списка: ссылка

да, я делал с помощью choosen.js Можете проверить эту ссылку: ссылку
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
да, я делал с помощью choosen.js Можете проверить эту ссылку: ссылку
Проверьте что передается в шаблон. Попробуйте без chosen.js просто с помощью select multuple вывести значения - выпадающего списка не будет, но хотя бы увидите что передается в шаблон. Вот пример шаблона:
HTML:
<html> 
<body>
{% block body%}
<form name="CheckForm" method="POST" action="/result"> 
  <div class="wrap">
     <div class="search">
          <select multiple="multiple">
          {% for val in values %}
          <option value="{{val}}">{{val}}</option>
          {% endfor %}
          </select>
        <button type="submit" class="searchButton" name=form>
          <i class="fa fa-search"></i>
       </button>
     </div>
  </div>
</form>
{% endblock %}
</body>
</html>
 

arch1tect

Новичок
Пользователь
Май 17, 2020
7
0
1
Проверьте что передается в шаблон. Попробуйте без chosen.js просто с помощью select multuple вывести значения - выпадающего списка не будет, но хотя бы увидите что передается в шаблон. Вот пример шаблона:
HTML:
<html>
<body>
{% block body%}
<form name="CheckForm" method="POST" action="/result">
  <div class="wrap">
     <div class="search">
          <select multiple="multiple">
          {% for val in values %}
          <option value="{{val}}">{{val}}</option>
          {% endfor %}
          </select>
        <button type="submit" class="searchButton" name=form>
          <i class="fa fa-search"></i>
       </button>
     </div>
  </div>
</form>
{% endblock %}
</body>
</html>

проверил. в шаблон передается только одно зачение и оно же остается в форме. Не могу заново открыть выпадающий списко и добавлять другие значения.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
проверил. в шаблон передается только одно зачение и оно же остается в форме. Не могу заново открыть выпадающий списко и добавлять другие значения.
Значит нужно передать в шаблон несколько значений. Попробуйте сделать так:
Python:
@app.route('/', methods=['GET'])
def page_show():
    values = ['1', '2', '3', '4', '5']
    return render_template('includes/default.html', values=values)
 
Последнее редактирование:

arch1tect

Новичок
Пользователь
Май 17, 2020
7
0
1
Значит нужно передать в шаблон несколько значений. Попробуйте сделать так:
Python:
@app.route('/', methods=['GET'])
def page_show():
    values = ['1', '2', '3', '4', '5']
    return render_template('includes/default.html', values=values)

сделал, теперь вместо сотни элементов из файла могу выбирать только из 5 остальные не видны. Но опять же только один элемент получается. Как реализовать само повторное выпадание списка и добавление элемента?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
сделал, теперь вместо сотни элементов из файла могу выбирать только из 5 остальные не видны. Но опять же только один элемент получается. Как реализовать само повторное выпадание списка и добавление элемента?
Просто по вашим постам я понял что у вас в шаблон не передается больше 1 значения. Насчет как выбрать - если шаблон с
<select multiple="multiple"> то можно выбрать несколько элементов кликнув на них при зажатой клавише ctrl (если вы на windows).
Вот этот шаблон если что:
HTML:
<html>
<body>
{% block body%}
<form name="CheckForm" method="POST" action="/result">
  <div class="wrap">
     <div class="search">
          <select multiple="multiple">
          {% for val in values %}
          <option value="{{val}}">{{val}}</option>
          {% endfor %}
          </select>
        <button type="submit" class="searchButton" name=form>
          <i class="fa fa-search"></i>
       </button>
     </div>
  </div>
</form>
{% endblock %}
</body>
</html>
 

arch1tect

Новичок
Пользователь
Май 17, 2020
7
0
1
Просто по вашим постам я понял что у вас в шаблон не передается больше 1 значения. Насчет как выбрать - если шаблон с
<select multiple="multiple"> то можно выбрать несколько элементов кликнув на них при зажатой клавише ctrl (если вы на windows).
Вот этот шаблон если что:
HTML:
<html>
<body>
{% block body%}
<form name="CheckForm" method="POST" action="/result">
  <div class="wrap">
     <div class="search">
          <select multiple="multiple">
          {% for val in values %}
          <option value="{{val}}">{{val}}</option>
          {% endfor %}
          </select>
        <button type="submit" class="searchButton" name=form>
          <i class="fa fa-search"></i>
       </button>
     </div>
  </div>
</form>
{% endblock %}
</body>
</html>

да, вы верно поняли, передается не больше одного элемента. У меня все завязано на теге datalist, как только меняю на select все ломается как-будьто. С datalist никак нельзя это решить? Спасибо.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
да, вы верно поняли, передается не больше одного элемента. У меня все завязано на теге datalist, как только меняю на select все ломается как-будьто. С datalist никак нельзя это решить? Спасибо.
Вот простое решение. Каждый раз когда выбирается значение в datalist скрипт прибавляет его к значению скрытого поля через запятую и очищает поле ввода datalist`a. Когда произойдет отправка формы, то по имени скрытого поля можно будет получить строку со значениями выбранных элементов через запятую и распарсить ее.
Вот шаблон:
HTML:
<html>
<body>
{% block body%}
<script>
function func(){
  x = document.getElementById('input').value
  document.getElementById('input').value = ''
  document.getElementById('field1').value += ',' + x

}
</script>
<form name="CheckForm" method="POST" action="/result">
  <div class="wrap">
     <div class="search">
        <input type="text" list="val" multiple="multiple" class="searchTerm" name="value" placeholder="Type your value" onchange="func()" id='input'>
        <datalist id="val">
          {% for val in values %}
          <option value="{{val}}">{{val}}</option>
          {% endfor %}
        </datalist>
        <input id='field1' type='hidden' name='field1' value='' />
        <button type="submit" class="searchButton" name=form>
          <i class="fa fa-search"></i>
       </button>
     </div>
  </div>
</form>
{% endblock %}
</body>
</html>
А во вью примерно такой код:
Python:
@app.route('/', methods=['GET', 'POST'])
def result():
    if request.method == 'POST':
        for k, v in request.form.items():
            if k == 'field1':
                print(v)

    return render_template('default.html')
 

Форум IT Специалистов