#django #django-templates #django-views
#django #django-шаблоны #django-просмотры
Вопрос:
Я совсем новичок в Django, поэтому прошу прощения, если я делаю глупые ошибки.
Вот код, который у меня есть на данный момент:
Для views.py:
def bylog(request):
if request.POST.get('Filter'):
return render(request, 'index.html', context)
filtered_login = Invalid.objects.values_list('login').distinct()
filtered = []
for item in filtered_login:
filtered.append(item[0])
results = {'results': results, 'filtered': filtered}
return render(request, 'bylog.html', context)
Вот фрагмент bylog.html:
<select id>"dropdown">
{% for item in filtered %}
<option value={{ item }}">{{ item }}</option>
{% endfor %}
</select>
<input type="submit" value="Filter" name="Filter" />
Моя главная цель — получить значение из выпадающего списка, и после того, как пользователь нажмет Filter
кнопку, значение будет передано другому шаблону.
Это вообще возможно?
Спасибо за помощь.
Ответ №1:
Основное для вашей цели, я полагаю, это управление POST
в django, что означает, что вы хотите отправить любые данные / переменные из шаблона в представление, а затем выполнить с ним любую операцию (отправить его в другой шаблон или сохранить …)
Основным для этого является (использование HTML-формы, а не формы Django):
- Create a HTML form in the template
- Add the selects/inputs with the data you want to manage and a button/input to make the post
- Manage the post in the view
ПРИМЕР
форма шаблона
<form id="" method="post" action=".">
{% csrf_token %}
<select id="any_name" name="any_name">"dropdown">
{% for item in filtered %}
<option value={{ item }}">{{ item }}</option>
{% endfor %}
</select>
<input type="submit" value="Filter" name="Filter" />
</form>
view.py
def your_view(request):
if request.method == 'POST': # If anyone clicks filter, you receive POST method
data = request.POST['any_name']
# Do what you need here with the data
# You can call another template and send this data
# You can change any_name for the variable you want, changing the name and id in the select
#Your view code
Я рекомендую вам прочитать об Django forms
этом, потому что, если вам нужна форма большего размера для управления данными модели с большим количеством полей, a Django Form
сэкономит вам много времени
Комментарии:
1. Вау, спасибо вам за подробный ответ. Я обязательно это проверю. В нем говорится, что мне нужен csrf_token, когда я пытаюсь сделать то, что я делал ранее, но я могу провести свое исследование по этому вопросу. Большое спасибо!
2. о, извините, я забыл добавить токен, добавить
{% csrf_token %}
внутри формы (я исправил код, проверьте сейчас)