URL-адрес django, содержащий несколько необязательных аргументов / параметров - PullRequest
0 голосов
/ 08 мая 2020

Пытаясь создать свой первый проект django, я застрял в передаче значений для фильтрации продуктов. Каждая функция, которой передано значение 1, будет активным фильтром, а остальные будут равны 0, т.е. неактивны. urls.py:

urlpatterns=[
path('women/<str:category>/filter?pricefrom=<int:min>&to=<int:max>&size?s=<int:s>&m=<int:m>&l=<int:l>&xl=<int:xl>&xxl=<int:xxl>&xxxl=<int:xxxl>&color?blue=<int:blue>&red=<int:red>&yellow=<int:yellow>&black=<int:black>&white=<int:white>&green=<int:green>&brown=<int:brown>',views.women_category,name='women category page with filters'),
]

views.py:

def women_category(request,category,id=None,flag=None,min=None,max=None,s=None,m=None,l=None,xl=None,xxl=None,xxxl=None,blue=None,red=None,yellow=None,black=None,white=None,green=None,brown=None):
#product filter logics here

Я хочу, чтобы пользователь мог использовать любые возможные комбинация фильтров, с фильтрами: Цена: мин., макс. Размер: S, M, L, XL, XXL, XXXL Цвет: желтый, синий, зеленый, ... и т. д. c

Я не 'Не знаю, как использовать Regex в URL-адресах, поэтому, пожалуйста, помогите мне преобразовать мой URL-адрес в URL-адрес регулярного выражения, чтобы все переменные фильтра были необязательными для передачи через fronted.

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Вам не нужно и не следует сопоставлять параметры запроса как часть URL-адреса. Они доступны в Django через request.GET.

Боковое примечание: я думаю, что рекомендуется использовать чтобы соответствовать этой части URL-адреса, если это возможно. Я не совсем уверен, что остановлюсь на /.

urls.py:

urlpatterns = [
    path('women/<slug:category>/filter',views.women_category,name='women category page with filters'),
]

views.py:

def women_category(request,category):
    id = request.GET.get('id')  # ... etc
    # product filter logics here
0 голосов
/ 08 мая 2020

Есть несколько способов добавить необязательные параметры. Вы можете использовать регулярное выражение или добавить несколько шаблонов. вы можете увидеть примеры здесь: Необязательные параметры получения в django?

Но в вашем случае, когда используются параметры получения для фильтрации, лучшим вариантом будет обработка его в представлении. поскольку у вас много параметров, требуется много повторяющихся шаблонов, которые так мало отличаются, и если вы go с регулярным выражением, это будет довольно длинное регулярное выражение, или вам нужно будет выполнять проверки своих представлений, если вы go с простое регулярное выражение. поэтому вместо этого просто получите значения в вашем представлении и выполните фильтрацию там:

def women_category(request,category):
    min_value = request.GET.get("min")
    max_value = request.GET.get("max")
    flag = request.GET.get("flag")
              ...

вы можете добавить или удалить любой параметр в любое время, не создавая беспорядка в вашем файле пути URL.

...