我有以下观点:
def tag_page(request, tag):
products = Product.objects.filter(tag=tag)
return render(request, 'shop/tag_page.html', {'products': products, 'tag': tag})
def product_page(request, slug):
product = Product.objects.get(slug=slug)
return render(request, 'shop/product_page.html', {'product': product})
以及以下网址配置:
url(r'^(?P<tag>.+)/$', 'tag_page'),
url(r'^(?P<tag>.+)/(?P<slug>[-\w]+)/$', 'product_page'),
其中包含“tag”的正则表达式允许url路径随意增长,同时循环重定向到tag_page视图。
这让我有url:/ mens / shirts / buttonups /,其中路径的所有部分(/ mens,/ mens / shirts,/ mens / shirts / buttonups /)都指向tag_page视图,这是所需的
我想在某些时候结束这种行为,然后直接转到product_page视图,我尝试用它完成:
url(r'^(?P<tag>.+)/(?P<slug>[-\w]+)/$', 'product_page'),
当我关注product_page链接时:
<a href="{{ product.slug }}">{{ product }}</a>
我被定向到tag_pag视图。大概是因为slug url匹配标签正则表达式。
所以问题:有没有办法可以保持灵活的标记正则表达式重定向行为,但是一旦我到达产品页面就会“破坏”它?需要注意的一件重要事情是,我希望将产品页面保留在构建的url方案中,例如:mens / shirts / buttonups / shirt-product /
感谢任何见解,谢谢!
答案 0 :(得分:1)
您是否真的需要产品页面网址末尾的正斜杠?以正斜杠结尾的URL与不具有正斜杠的URL不同。
就像分隔符留在路径的末尾以建议目录(在其下面有文件)并在文件路径的末尾留下,所以你也可以为标签部分留下斜线但是将其丢掉个别产品。
完全解决问题: - )
答案 1 :(得分:0)
我认为你不能只用urlconf-。*总是匹配所有东西。 我会这样做:
url(r'^(?P<path>.+)/$', 'path_page'),
def path_page(request,path):
tags,unknown = path.rsplit('/',1)
try:
product = Product.objects.get(slug=unknown)
return some_view_function(request,path,product)
except Product.DoesNotExist:
return some_another_view_function(request,path)
但是 - 我在这里看到一些问题: