Django: переменные параметры в URLconf

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

Я создаю какой-то сайт электронной коммерции, похожий на 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 ответа

Решение

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

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

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

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

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

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

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

/LCD/LG/

средства type=LCD, brand=LG

но

/LG/LCD

не значит type=LG, brand=LCD так далее

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

.../search/?make=LD&size=42
Другие вопросы по тегам