У меня есть несколько категорий, таких как рестораны, спорт и фитнес, фаст-фуд и т. Д. c .. Я хочу создать раскрывающееся меню со всеми категориями и отображать различные элементы категории каждый раз при выборе другой категории:
HTML:
<form action="{% url 'show-all-objects' category=category page_num=1 %}" method="POST" id="sort_form">
<select data-placeholder="Categories:" class="utf_chosen_select_single" id="select_sort_category" name="select_sort_category" onchange="this.form.submit()">
<option>Категориии</option>
<option value="restaurants">Ресторанти</option>
<option value="sportfitness">Спортни и фитнес</option>
<option value="carservice">Автосервизи</option>
<option value="beautysalon">Салони за красота</option>
<option value="fastfood">Бързо хранене</option>
<option value="carwash">Автомивки</option>
<option value="fun">Забавлание</option>
<option value="other">Други</option>
</select>
</form>
Хорошо, это первая ссылка:
http://localhost:8000/objects/all/restaurants/1/
Затем из <select>
выберите секунду опция со значением sportfitness
Она обновляет sh страницу и показывает элементы из категории sportfitness
, но URL-адрес по-прежнему http://localhost:8000/objects/all/restaurants/1/
После этого выберите третий параметр со значением carservice
Страница снова refre sh, на этот раз URL-адрес изменяется http://localhost:8000/objects/all/sportfitness/1/
вместо carservices
, поэтому задержка 1 раз.
urls.py:
from django.urls import path, re_path
from . import views
urlpatterns = [
path('user/<int:pk>/', views.UserObjectsView.as_view(), name='user-objects'),
path('add/<str:category>/', views.add_object, name='add-object'),
path('<str:category>/<int:pk>/<int:page_num>/', views.show_object, name='show-object'),
#path('all/<str:category>/<int:page_num>/', views.show_all_objects, name="show-all-objects"),
re_path(r'all/(?P<category>\w+)/(?P<page_num>\d+)/?/(?P<city>\d+)?', views.show_all_objects, name="show-all-objects"),
]
views.py:
def show_all_objects(request, category, page_num, city=None):
params_map = {
'restaurants': Restaurant,
'sportfitness': SportFitness,
'carservice': CarService,
'beautysalon': BeautySalon,
'fastfood': FastFood,
'carwash': CarWash,
'fun': Fun,
'other': Other,
}
if request.method == 'POST':
category = request.POST.get('select_sort_category')
objects = Object.objects.instance_of(params_map.get(category)).order_by('rating')
if city is not None:
objects = objects.filter(city=city)
paginator = Paginator(objects, 2)
objects = paginator.get_page(page_num)
context = {
'objects': objects,
'category': category,
'page_num': page_num,
}
return render(request, 'show_all_objects.html', context)
Я могу предоставить больше информации по мере необходимости. Вероятно, это не проблема Django, это обычная проблема программирования, я не совсем уверен.