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