我在我的网址中有正则表达式,它接受传递一个slug到我的视图,例如:
127.0.0.1/cart/product_slug1
但我需要一个接受传递一个或多个slu的正则表达式,例如:
127.0.0.1/cart/product_slug1/product_slug2/product_slug3 /.../ product_slugN
urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(
r'^cart/add/(?P<slug>[\w_-]+)/$', views.create_cartitem,
name='create_cartitem'
),
可能发送很多slu ??
答案 0 :(得分:0)
[更新] :您似乎无法做到这一点。相反,您可以放置一个捕获所有模式并捕获整个URL。然后在views
内,您可以按/
拆分并获取所需的参数。像这样:
urlpatterns = [
url(
r'^cart/add/(?P<slugs>[\w_/-]+)/$', views.create_cartitem, name='create_cartitem'
),
然后在views
中,执行此操作:
def my_view(request, slugs):
slugs = slugs.split('/')
# now slugs is a list of strings
但请注意,由于cart/add/h/e/l/l/o
和cart/add/hell//o//to/you
都有效,因此容易出错。
- 老答案 -
当然可以,但你不能使用both named captured parameters with unnamed ones。
所以,将urls.py
更改为:
urlpatterns = [
url(
r'^cart/add/([\w_-]+)/([\w_-]+/)*$', views.create_cartitem, name='create_cartitem'
),
在你的views.py
内,而不是kwargs
(就像你已经拥有的slug
),你必须使用args
(位置参数,现在你已经拥有了slug
s列表。像这样:
def my_view(request, *args):
for arg in args:
print(arg)
现在,如果您在127.0.0.1:8000/cart/add/argv/argvv/argvvv/
内输入views
,则会将其作为列表['argv', 'argvv', 'argvvv']
获取。