【问题标题】:Recursive URL routing in DjangoDjango中的递归URL路由
【发布时间】:2013-05-29 12:35:10
【问题描述】:

我希望通过 URL 模拟(相当简单的)SELECT 查询。

例如,在博客引擎中,您希望/tag/sometag/ 引用具有sometag 标签的帖子。此外,/tag/sometag/or/tag/other/and/year/2013 应该是一个有效的 URL,除了其他更复杂的 URL。所以,(理论上)对 url 的大小没有限制,我建议这应该递归地完成,但是在 Django URL Routing 模型中如何处理呢?

【问题讨论】:

    标签: django url-routing


    【解决方案1】:

    我会为所有这些 URL 使用一个通用的 URL 模式。

    url(r'^query/([\w/]*)/$', 'app.views.view_with_query'),
    

    您将收到所有“tag/sometag/or/tag/other/and/year/2013”​​作为视图的参数。

    然后,您可以解析参数并提取信息(标签,值,标签,值,年份,值)进行查询。

    【讨论】:

    • 那会完全忽略使用 URLConf 背后的想法,不是吗?
    • 是的,但是在这种情况下,不知道 url 的结构。
    【解决方案2】:

    2021 年更新

    django.conf.urls.url 在 3.1 及更高版本中已弃用。这是django中递归url路由的解决方案:

    urls.py

    from django.urls import path, re_path
    from .views import index
    
    
    urlpatterns = [
        re_path(r'^query/([\w/]*)/$', index, name='index'),
    ]
    

    views.py

    from django.shortcuts import render, HttpResponse
    
    
    # Create your views here.
    def index(request, *args, **kwargs):
        print('-----')
        print(args)
        print(kwargs)
        return HttpResponse('<h1>hello world</h1>')
    

    如果我打电话给python manage.py run server,然后转到'http://127.0.0.1:8000/query/nice/',我可以在终端中看到这些:

    -----
    ('nice',)
    {}
    

    【讨论】:

      猜你喜欢
      • 2016-01-22
      • 2018-12-18
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 2019-04-27
      • 1970-01-01
      • 2019-04-16
      • 2020-10-09
      相关资源
      最近更新 更多