Как отправить переменные из X-DATA на сервер. Alpine JS & HTMX & Django?
У меня получился следующий фрагмент. В нем есть несколько блоков select. То, что я хотел бы сделать, это собрать обе переменные и отправить на сервер Django. Но request.GET пуст. Что не так?
<div class="flex" x-data="{ foo: '', bar: ''}">
<div class="flex justify-between">
<div class="mt-1">
<select x-model="foo"
name="foo"
id="foo"
class="w-64 h-14 text-sm border-gray-300 focus:bg-transparent">
<option value="">Type of FOO</option>
<option value="FOO_1">FOO_1</option>
<option value="FOO_2">FOO_2</option>
<option value="FOO_1">FOO_3</option>
</select>
</div>
<div class="mt-1">
<select name="bar"
x-model="bar"
id="bar"
class="w-64 h-14 text-sm border-gray-300 focus:bg-transparent">
<option value="">BAR Types</option>
<option value="BAR_1">BAR_1</option>
<option value="BAR_2">BAR_2</option>
<option value="BAR_3">BAR_3</option>
</select>
</div>
<input type="text" name="foo" x-model="foo" hidden />
<input type="text" name="bar" x-model="bar" hidden />
<button
hx-get="{% url 'server:parse-values' %}"
hx-target="#element"
hx-swap="innerHTML"
hx-include="[name='foo', name='bar']">
<span
class="cursor-pointer px-3 py-3 border-2">Parse details</span>
</button>
</div>
</div>
Но когда я нажимаю на кнопку, бэкенд Django не получает параметры foo и bar.
Есть мысли?
Чтобы включить несколько входов, необходимо разделить их запятой следующим образом:
hx-include="input[name='foo'], input[name='bar']"
Это было бы эквивалентно использованию querySelectorAll для захвата ваших входных данных:
document.querySelectorAll("input[name='foo'], input[name='bar']")
Я добавил дополнительные input, чтобы исключить списки select, но вы можете, вероятно, удалить скрытые входы из вашего примера и включить только списки.
Я также должен добавить, что если вы перенесете атрибуты htmx из кнопки в x-data div и измените его на форму. Затем измените кнопку на тип submit. Все данные формы будут автоматически отправлены на сервер.
<form class="flex" x-data="{ foo: '', bar: ''}"
hx-get="{% url 'server:parse-values' %}"
hx-target="#element"
hx-swap="innerHTML"
>
<div class="flex justify-between">
<div class="mt-1">
<select x-model="foo"
name="foo"
id="foo"
class="w-64 h-14 text-sm border-gray-300 focus:bg-transparent">
<option value="">Type of FOO</option>
<option value="FOO_1">FOO_1</option>
<option value="FOO_2">FOO_2</option>
<option value="FOO_1">FOO_3</option>
</select>
</div>
<div class="mt-1">
<select name="bar"
x-model="bar"
id="bar"
class="w-64 h-14 text-sm border-gray-300 focus:bg-transparent">
<option value="">BAR Types</option>
<option value="BAR_1">BAR_1</option>
<option value="BAR_2">BAR_2</option>
<option value="BAR_3">BAR_3</option>
</select>
</div>
<button type="submit">
<span class="cursor-pointer px-3 py-3 border-2">Parse details</span>
</button>
</form>