Django:URLconf中的变量参数

时间:2011-12-08 14:17:12

标签: python django url urlconf

我一直在寻找这个问题但找不到任何内容,抱歉,如果重复的话。

我正在构建某种类似于ebay的电子商务网站。当我试图浏览“类别”和“过滤器”时,我出现了问题。例如。您可以浏览“监视”类别。这将显示许多监视器和一些过滤器(与ebay完全相同)来应用它们。所以,你去“监视器”,然后你有像:

这样的过滤器
  • 类型:LCD - LED - CRT
  • 品牌:ViewSonic - LG - 三星
  • 最大分辨率: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 个答案:

答案 0 :(得分:3)

Ben,我希望这会对你有所帮助

<强> 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 :(得分:1)

您可以将其添加到您的网址:

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

然后myview将获得类别和过滤器的参数。您可以在“/”上拆分过滤器,并在Filters表中搜索每个部分。

这有意义吗?

答案 2 :(得分:0)

您打算如何决定过滤哪个方面?您是否有每个类别的已接受关键字列表?即服务器如何知道

/LCD/LG/

表示type=LCD, brand=LG

但是

/LG/LCD

表示type=LG, brand=LCD

你有什么理由不想使用GET参数,例如

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