【问题标题】:Django url passing as many parameters as you want delimited by /Django url 传递任意数量的参数,由 / 分隔
【发布时间】:2021-01-16 07:17:38
【问题描述】:

如何定义 URL 模式,以便可以将任意数量的参数传递给 URL?我真的研究了文档和其他 stackoverflow 问题,但我没有找到类似的东西。我需要它作为电子商务网站的过滤器。

我想实现这样的目标:

urlpatterns = [
    path('test/<str:var1>-<str:var2>/<str:var3>-<str:var4>/...', views.test, name='test'),
]

在我的视图函数中,我会这样定义它:

def test(request, *args, **kwargs):
    # Do whatever you want with kwargs
    return HttpResponse('Test')

【问题讨论】:

    标签: python django django-urls django-url-reverse


    【解决方案1】:

    我认为这是一种错误的路径创建方式,如果您想将其用作过滤器而不是在路径中使用它,您应该使用 url 参数作为获取请求。

    但如果你坚持这样做,你可以使用Regular expressions 're_path'

    # urls.py
    
    from django.urls import path, re_path
    from django.conf.urls import url
    from myapp import views
    
    urlpatterns = [
        re_path(r'^test/(?P<path>.*)$', views.test, name='test'),
        # or use url instead it's same thing
        url(r'^test/(?P<path>.*)$', views.test, name='test'),
    ]
    

    【讨论】:

    • 我真的不知道如何使用正则表达式。我会看关于那个的教程。我只有一个问题:re_path 会帮助我实现我的要求吗?
    • @B.Victor 检查编辑的答案我添加了你需要的代码
    • 它实际上只会给你一个参数“路径”,但我可以根据这个参数拆分字符串,然后根据需要对其进行操作。谢谢
    • 另一种选择是使用path('test/&lt;path:path&gt;', views.test, name='test')path: 转换器意味着它匹配斜线。
    • 请注意 url() 在 Django 3.1 中已被弃用,因此不建议在新代码中使用它。
    【解决方案2】:

    您是否考虑过使用query_params

    那是path('test', views.test, name='test')

    网址:/test/?filter=asd....

    然后通过视图中的请求访问它:

    def test(request):
        params = request.GET.get('filter', None)
        return HttpResponse()
    

    看看你能不能这样解决你的问题:)

    【讨论】:

    • 我理解您的意思,但我确实需要一个自定义 URL 路径,该路径将由 / 分隔。但无论如何,你的观点总体上是非常有效的。
    猜你喜欢
    • 2020-11-10
    • 2017-12-18
    • 1970-01-01
    • 2014-03-22
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多