Regex 如何";“中断”;来自django urlconf中的正则表达式
我有以下意见:Regex 如何";“中断”;来自django urlconf中的正则表达式,regex,django,django-views,urlconf,Regex,Django,Django Views,Urlconf,我有以下意见: 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)
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配置:
url(r'^(?P<tag>.+)/$', 'tag_page'),
url(r'^(?P<tag>.+)/(?P<slug>[-\w]+)/$', 'product_page'),
url(r'^(?P.+)/$,'tag_page'),
url(r'^(?P.+)/(?P[-\w]+)/$,“产品页面”),
带有“tag”的正则表达式允许url路径任意增长,同时循环重定向到tag_页面视图
这让我有了url:/mens/shirts/buttonups/,其中路径的所有部分(/mens、/mens/shirts、/mens/shirts/buttonups/)都直接指向所需的标记页面视图
但是,我想在某个时候结束此行为,并直接进入product_页面视图,我试图通过以下方式完成此操作:
url(r'^(?P<tag>.+)/(?P<slug>[-\w]+)/$', 'product_page'),
url(r'^(?P.+)/(?P[-\w]+)/$,“产品页面”),
当我关注产品页面链接时:
<a href="{{ product.slug }}">{{ product }}</a>
我被引导到tag_pag视图。大概是因为slug url与标记regex匹配
所以问题是:有没有一种方法可以保持灵活的标记regex重定向行为,但一旦到达产品页面,就会“中断”它?需要注意的一件重要事情是,我希望将产品页面保持在构建的url方案中,如:mens/shirts/buttonup/shirtproduct/
任何洞察都将不胜感激,谢谢 我认为您不能只使用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)
url(r'^(?P.+)/$,“路径页面”),
def path_页面(请求,路径):
标记,unknown=path.rsplit('/',1)
尝试:
product=product.objects.get(slug=unknown)
返回一些视图函数(请求、路径、产品)
除Product.DoesNotExist外:
返回另一个视图函数(请求、路径)
但是,我在这里看到了一些问题:
- 如果标签和产品的slug名称相同怎么办
- 你的解决方案是不友好的搜索引擎优化,除非你想麻烦与重复的内容元标记
这完全解决了这个问题:-)很简单,正是我想要的。谢谢