0

私は次の見解を持っています:

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'),

「tag」が含まれている正規表現を使用すると、tag_pageビューに循環的にリダイレクトしながら、URLパスを任意に増やすことができます。

これにより、次の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ビューに移動します。おそらく、そのスラッグURLがタグの正規表現と一致するためです。

質問:柔軟なタグ正規表現リダイレクトの動作を維持しながら、製品ページに到達したらそれを「中断」する方法はありますか?注意すべき重要な点の1つは、商品ページを次のような構築されたURLスキーム内に維持したいということです。mens/ shirts / buttonups / shirt-product /

どんな洞察もありがたいです、ありがとう!

4

2 に答える 2

1

製品ページのURLの最後にスラッシュが本当に必要ですか?スラッシュで終わるURLは、そうでないURLとは異なります。

パスの最後に区切り文字を残して(その下にファイルがある)ディレクトリを提案し、ファイルパスの最後に省略したのと同じように、タグセクションではスラッシュをオンのままにして、個々の製品ではスラッシュをオフにすることもできます。

それは問題を完全に回避します:-)

于 2012-08-27T07:20:20.320 に答える
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)

しかし-私はここにいくつかの問題があります:

  • タグが製品のスラッグと同じ名前の場合はどうなりますか?
  • 重複するコンテンツメタタグを気にしない限り、ソリューションはSEOに適していません
于 2012-08-27T07:03:15.067 に答える