2016-10-11 58 views
0

我想将两个或多个卖家映射到相同的方法ecommerce.views.seller。下面是工作代码:将图案传递给url

urlpatterns = patterns('', 
    url(r'^(?:store1|store3)/$', 'ecommerce.views.seller'), 
) 

有没有什么办法让我可以声明一些变量,模式,简单地将它传递到URL模式。喜欢的东西:

SELLER_ID = '?:store1|store3' 
urlpatterns = patterns('', 
    url(r'^(SELLER_ID)/$', 'ecommerce.views.seller'), 
) 

回答

2

只需使用普通字符串格式化语法:

url(r'^({})/$'.format(SELLER_ID), 'ecommerce.views.seller') 
+0

For:'http://127.0.0.1:8000/store1 /'TypeError at/store1/ seller()只需1参数(2给出) – Samuel

+0

@Samuel然后,你如何定义'seller'视图有什么问题。 – ozgur

+0

'r'^({})/ $'.format(“store1 | store3”)'产生相同的字符串。你可以在shell中测试它。 – ozgur

0

你应该使用捕捉的正则表达式的路径变量组,才能让他们在您的视图方式提供的关键字参数:

https://docs.djangoproject.com/en/1.10/topics/http/urls/#specifying-defaults-for-view-arguments

上面的链接有一个很短的例子。

你可能会想要做什么:

urlpatterns = patterns('', 
    url(r'^store(?P<pk>[0-9]+)/$', 'ecommerce.views.seller'), 
) 
在电子商务

/views.py:

def seller(request, pk): 
    seller = get_object_or_404(Store, pk=pk) # if DB object 
    # or if not in DB then just use the number 
    # do your stuff 
    return response 

或使用一个通用的观点,如果PK指向一个DB模式:

urlpatterns = patterns('', 
    url(r'^store(?P<pk>[0-9]+)/$', StoreDetailView.as_view(), name='store_detail'), 
) 

class StoreDetailView(DetailView): 
    model = Store 
    # the rest is django magic, you just have to provide the template