将模式传递给url

时间:2016-10-11 10:29:37

标签: django python-2.7

我想将两个或更多卖家映射到相同的方法ecommerce.views.seller。以下是工作代码:

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

有什么方法可以用模式声明一些变量并简单地将它传递给urlpatterns。类似的东西:

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

2 个答案:

答案 0 :(得分:2)

只需使用常规字符串格式化语法:

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

答案 1 :(得分: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指向数据库模型,则使用通用视图:

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