Django: переменные параметры в URLconf - PullRequest
4 голосов
/ 08 декабря 2011

Я искал этот вопрос и не смог найти ни одного, извините, если он дублируется.

Я создаю какой-то сайт электронной коммерции, похожий на ebay.Проблема у меня возникает, когда я пытаюсь просмотреть «категории» и «фильтры».Например.Вы можете просмотреть категорию «Монитор».Это покажет вам множество мониторов и некоторые фильтры (точно такие же, как на ebay) для их применения.Итак, вы переходите на «мониторы», тогда у вас есть фильтры вроде:

  • Тип: LCD - LED - CRT
  • Бренд: ViewSonic - LG - Samsung
  • Максимальное разрешение: 800x600 - 1024x768

И эти фильтры будут добавлены к URL-адресу, как показано в примере, при просмотре мониторов URL-адрес может выглядеть примерно так:

store.com/monitors

Если вы примените фильтр «Тип»:

store.com/monitors/LCD

«Бренд»:

store.com/monitors/LCD/LG

«Максимальное разрешение»:

store.com/monitors/LCD/LG/1024x768

Итак, суммируя,Структура URL будет выглядеть примерно так:

/category/filter1/filter2/filter3

Я не могу понять, как это сделать на самом деле.Проблема в том, что фильтры могут быть переменными.Я думаю, что в представлении нужно будет использовать **kwargs, но я не совсем уверен.

У вас есть идеи, как захватить такие параметры?

Большое спасибо!

Ответы [ 3 ]

3 голосов
/ 09 декабря 2011

Бен, я надеюсь, что это поможет тебе

urls.py

from catalog.views import catalog_products_view

urlpatterns = patterns(
    '',
    url(r'^(?P<category>[\w-]+)/$', catalog_products_view, name="catalog_products_view"),
    url(r'^(?P<category>[\w-]+)/(?P<filter1>[\w-]+)/$', catalog_products_view, name="catalog_products_view"),
    url(r'^(?P<category>[\w-]+)/(?P<filter1>[\w-]+)/(?P<filter2>[\w-]+)/$', catalog_products_view, name="catalog_products_view"),
    url(r'^(?P<category>[\w-]+)/(?P<filter1>[\w-]+)/(?P<filter2>[\w-]+)/(?P<filter3>[\w-]+)/$', catalog_products_view, name="catalog_products_view"),
)

view.py

def catalog_products_view(request, category, filter1=None, filter2=None, filter3=None):
    # some code here

или

def catalog_products_view(request, category, **kwargs):
    filter1 = kwargs['filter1']
    filter2 = kwargs['filter2']
    ....
    filterN = kwargs['filterN']
    # some code here
1 голос
/ 08 декабря 2011

Вы можете добавить это к своим URL:

url(r'^(?P<category>\w)/(?P<filters>.*)/$', 'myview'),

И тогда myview получит параметры категории и фильтры. Вы можете разделить фильтры на "/" и искать каждую деталь в таблице фильтров.

Имеет ли это смысл?

0 голосов
/ 08 декабря 2011

как вы собираетесь решить, какой аспект фильтруется?У вас есть список принятых ключевых слов для каждой категории?т.е. как сервер узнает, что

/LCD/LG/

означает type=LCD, brand=LG

, но

/LG/LCD

не означает означает type=LG, brand=LCD и т. д.

Есть ли причина, по которой вы не хотите использовать GET-параметры, например

.../search/?make=LD&size=42
...