Пытаюсь найти способ передать список элементу в request.POST. Как мне это сделать?
Вот мой html код в проекте django:
<!DOCTYPE html> <html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{% load static %}
<script src="{% static 'jquery-3.6.2.min.js' %}" ></script>
</head>
<body>
<form action="{% url 'index' %}" method="post">
{% csrf_token %}
<button id="button1" name="action" value="">button2</button>
<script>
$("#button1").click(
function(){
arr = ["one", "two"]
$("#button1").attr('value',arr)
}
)
</script>
</form>
</body>
</html>
При нажатии на кнопку я запускаю JQuery, который присваивает массив: arr
значению кнопки1.
Это request.POST после этого:
<QueryDict: {'csrfmiddlewaretoken': ['Rws3PVVBVOGsoXm720M5YbuZNTYMin6CxklI78in2PWdrxAYKxw3XqV7cba2xt7P'], 'action': ['one,two']}>
Вместо 'action': ['one,two']
я хочу получить 'action': ['one', 'two']
, или 'action': [['one', 'two']]
Как это сделать?
Используйте JSON.stringify()
для преобразования массива в строку JSON, а затем используйте json.loads(...)
для загрузки JSON строки, чтобы преобразовать ее в Python объект.
Ваш код будет выглядеть следующим образом
JavaScript
<script>
$("#button1").click(
function(){
arr = JSON.stringify(["one", "two"])
$("#button1").attr('value',arr)
})
</script>
Python
import json
def foo(request):
action = request.POST.get('action')
if action:
print(json.loads(action)) # result -> {'action': ['one', 'two']}
Примечание:
Убедитесь, что вы санируете ваши
request.POST.get('action')
данные, они могут содержать вредоносный код, если они отправлены клиентом, поэтому всегда проверяйте ваши данные запроса.