#python #html #jquery #flask
Вопрос:
Я новичок в использовании flask и просто создаю чрезвычайно простое приложение.
У меня есть страница, на которой я прошу пользователей ввести текст и тип (они могут добавить несколько ответов), затем я использую переменные сеанса для отображения их входных данных в таблице на той же странице.
Но по какой-то причине, когда я пытаюсь использовать одну из переменных сеанса в последующих частях кода, она просто возвращается пустой, в то время как другая возвращается абсолютно нормально
session['test']
Работает нормально, но это то session['type']
, что перестает работать. Например, я получаю значения, необходимые для get_name
функции, но когда я просто пытаюсь отобразить ее в шаблоне или использовать в других функциях, она просто возвращает пустой список
def get_name(key_val, val_val):
final_data = {}
for key in key_val:
for value in val_val:
final_data[key] = value
val_val.remove(value)
break
return final_data
@app.route('/test', methods=['POST', 'GET'])
def test_page():
if request.method == 'POST':
test_data = request.form.getlist('test')
session['test'] = test_data
type_data = request.form.getlist('type') --> value disappears in subsequent use
session['type'] = type_data
final_dict = get_name(session['test'], session['type'])
return render_template('test.html', test_data = test_data, type_data=type_data, final_dict = final_dict)
else:
return render_template('test.html')
test.html (немного jQuery сверху используется для добавления последующих полей)
{% extends 'base.html' %} {% block head %}
<title>Task Master</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
var max_fields = 10; //maximum input boxes allowed
var wrapper = $(".input_fields_wrap"); //Fields wrapper
var add_button = $(".add_field_button"); //Add button ID
var x = 1; //initlal text box count
$(add_button).click(function(e){ //on add input button click
e.preventDefault();
if(x < max_fields){ //max input box allowed
x ; //text box increment
$(wrapper).append('<div> <input id="test" type="text" name="test"/> <select id="type" name="type"><option value="Primary">Primary</option><option value="Secondary">Secondary</option></select> <a href="#" class="remove_field">Remove</a> </div>'); // add input boxes.
}
});
$(wrapper).on("click",".remove_field", function(e){ //user click on remove text
e.preventDefault(); $(this).parent('div').remove(); x--;
})
});</script>
{% endblock %} {% block body %}
<h1>hello</h1>
<div>
<form action="/test" method="POST">
<div class="input_fields_wrap">
<button class="add_field_button">Add More Fields</button>
<input type="text" name="test" id="test" />
<select id="type" name="type">
<option value="Primary">Primary</option>
<option value="Competitor">Competitor</option>
</select></div>
<div><input type="submit"/>
</form>
<table>
<tr>
<th>Username</th>
<th>type</th>
</tr>
{% if final_dict is not defined %}
<p>Empty</p>
{% else %}
{% for key, value in final_dict.items() %}
<tr>
<td>{{ key }}</td>
<td>{{ value }}</td>
</tr>
{% endfor %}
{% endif %}
</table>
<div>
<a href=/update_test>Submit</button></a>
</button>
</div>
{{ type_data }} "test"
{{ test_data }} "test"
{% endblock %}
Я предполагаю, что это как-то связано с HTML-шаблоном, так как в приложении оба рассматриваются как идентичные, но я, кажется, не могу этого понять