Django: как подключить настраиваемый url к методу GET
Я хочу реализовать метод поиска, который принимает в качестве фильтров свойства, выбранные пользователем на стороне front-end. URL, который я хочу создать, будет выглядеть примерно так:
urls.py:
urlpatterns = [
path('', views.get_data),
path(r'^find/<property>/<filter>/<value>', views.filter_view)
]
Где
<property> - значение (1-9), выбранное из:
<div class="dropdown-wrapper" style="padding-left: 0px">
<select class="dropdown" id="select-properties-dropdown">
<option class="property" value="0">Select property</option>
<option class="property" value="1">GID</option>
<option class="property" value="2">Type</option>
<option class="property" value="3">Province</option>
<option class="property" value="4">Street</option>
<option class="property" value="5">House number</option>
<option class="property" value="6">Postcode</option>
<option class="property" value="7">City</option>
<option class="property" value="8">Municipality</option>
</select>
</div>
<filter> - это значение из:
<div class="dropdown-wrapper" >
<select class="dropdown">
<option class="property" value="0">Contains</option>
<option class="property" value="1">Equal to</option>
<option class="property" value="2">Ends with</option>
<option class="property" value="3">Starts with</option>
</select>
</div>
и <value> взято из панели поиска:
<div class="dropdown-wrapper">
<form action="find" method="GET">
<input class="input searchbar" type="text"
aria-autocomplete="list"
aria-expanded="false"
id="searchBar"
style="height: 28.5px"
>
<button type="submit"><i class="fa fa-search"></i>
</button>
</form>
</div>
Используйте django forms. У них есть widget, которые эмулируют <select>. В дальнейшем вы можете использовать форму в django CBVs как FormView и добавить свою собственную функциональность, просто переопределив метод form_valid().
from django import forms
PROPERTY_CHOICES = [
('1', 'GID'),
('2', 'Type'),
('3', 'Province'),
#...
]
FILTER_CHOICES = [
('0', 'contains'),
('1', 'Equal'),
('2', 'Ends'),
('3', 'Starts'),
#...
]
class PropertyForm(forms.Form):
property = forms.CharField(widget=forms.Select(choices=PROPERTY_CHOICES, attrs={'class': 'property'}))
filter = forms.ChoiceField(choices=FILTER_CHOICES) # uses the select widget
value = forms.CharField()