【问题标题】:Catching URLs with GET parameters使用 GET 参数捕获 URL
【发布时间】:2015-12-01 03:08:32
【问题描述】:

我有旧的 Wordpress 网站。它的 URL 如下:

/?wpsc-product=abc

我在 Django 中建立了一个新网站,其 URL 如下:

/products/abc/

如何捕获旧 URL 并将它们重定向到新 URL?实际上,我不确定如何使用参数捕获 URL。

我希望能够编写每一个重定向,而不是制作正则表达式,因为我没有保留所有 slug,其中一些已更改。

【问题讨论】:

    标签: django django-urls


    【解决方案1】:

    您无法在 urls.py 中捕获像 ?wpsc-product=abc 这样的 GET 参数,但您可以编写一个视图来检查 GET 参数并重定向到新视图。

    这是一个带有两个视图的简化 urls.py。索引视图重定向带参数的请求并重定向它们(例如/?wpsc-product=abc),也处理不带任何参数的请求(例如/,并返回渲染的索引模板。

    urlpatterns = [
        url(r'^$', views.index, name='index'),
        url(r'^products/(?P<slug>[-\w]+)/$', views.view_product, name='view_product'),
    ]
    
    from django.shortcuts import redirect, render
    
    def index(request):
        # check for wpsc-product in GET params
        if 'wpsc-product' in request.GET:
            return redirect('view_product', slug=request.GET['wpsc-product'])
        else:
            # return the regular index template
            return render(request, 'index.html', {})
    

    【讨论】:

    • 这是部分答案,因为 URL 被重定向到同一个 slug。如果新网站中的 slug 发生了变化,它将无法正常工作。好主意,无论如何。
    • 您可以访问视图中的 slug,必要时可以轻松更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    相关资源
    最近更新 更多