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名称相同怎么办
  • 你的解决方案是不友好的搜索引擎优化,除非你想麻烦与重复的内容元标记

您真的需要产品页面URL末尾的正斜杠吗?以正斜杠结尾的URL与不以正斜杠结尾的URL不同

正如分隔符保留在路径的末尾以建议目录(在其下面有文件)并保留在文件路径的末尾一样,您也可以为标记部分保留斜杠,但为单个产品删除斜杠


这完全解决了这个问题:-)

很简单,正是我想要的。谢谢