【问题标题】:redirect vs reverse django重定向vs反向django
【发布时间】:2019-07-24 16:06:33
【问题描述】:

我曾在模型中的get_absolute_url 方法中使用反向,但我希望我对反向和重定向之间的区别有所了解,我曾尝试在谷歌上搜索但几乎没有 我也不知道我应该写什么来说服堆栈溢出我没有任何其他描述

【问题讨论】:

    标签: django django-models django-templates django-views


    【解决方案1】:

    这是一个例子

    应用程序/视图

    #imports
    def indexView(request):
        ....
        return render(request, 'index.html', context)
    
    def loginView(request):
        ....
        return redirect('index')
    
    def articleDetailView(request, id):
        ....
        return redirect(reverse('article-comments', kwargs={'id':id})
    
    def articleCommentsView(request, id):
        ....
        return render(request, 'comment_list.html', context)
    

    项目/网址

    #imports
    urlpatterns = [
    ....,
    path('', include(app.urls))
    ]
    

    应用程序/网址

    #imports
    urlpatterns = [
    ....,
    path('index/', index, name='index'),
    path('login/', loginView, name='login'),
    path('article/<int:id>/detail', articleDetailView, name='article-detail'),
    path('article/<int:id>/comments/',articleCommentsView,  name='article-comments')
    ....,
    ]
          
    

    对于 loginView redirect 将按原样返回 url,即 'index' 将附加到 base(project) urlpatterns。这里 redirect(reverse('index')) 也可以工作,因为对于反向功能,kwargs 默认为 None 并且 'index' 视图不需要任何 kwarg。它返回 '/index/' 传递给重定向(将再次附加到基本 url)。

    需要注意的一点是,reverse 用于生成完整的 url - 重定向所需 - 显示在“articleDetailview”中。

    【讨论】:

      【解决方案2】:

      两者最基本的区别是: Redirect 方法会将您重定向到一般的特定路线。 Reverse 方法会将完整的 URL 作为字符串返回到该路由。

      【讨论】:

        【解决方案3】:

        反向和重定向有不同的含义。下面是一个简单的解释:

        reverse 在 Django 中用于查找给定资源的 URL。假设您有一个博客网站,并且您想从主页提供指向您的博客文章的链接。您当然可以硬编码/posts/123/ 并在 URL 中更改您的博客文章的 ID,但这使得将来很难更改文章的 URL。这就是 Django 带有反向功能的原因。您需要做的就是传递您的 URL 路径的名称(在您的 urlpatterns 中定义),Django 将为您找到正确的 URL。之所以称为反向,是因为它是确定应为给定 URL 调用哪个视图的反向过程(该过程称为解析)。

        重定向并不特定于 Django 或任何其他 Web 框架。重定向意味着对于给定的 URL(或操作),应指示用户访问特定的 URL。这可以通过发送一个特殊的重定向请求来完成,浏览器将从那里为用户处理它,因此在该过程中不需要用户操作。您可以在重定向过程中使用反向来确定用户应重定向到的 URL。

        【讨论】:

        • 非常感谢您的帮助,我知道问这个问题可能很奇怪,但我认为 mu 对这两个词的实际含义的误解让我感到困惑,任何好的,再次感谢您
        【解决方案4】:

        GwynBleidD 已为您提供了答案,但您可能会感到困惑是有原因的。 Django redirect 快捷方式接受几种不同形式的参数。其中之一是带有参数的 URL 模式鬃毛,然后将其传递给 reverse 以生成要重定向到的实际 URL。但这只是启用通用模式的捷径。

        【讨论】:

        • 非常感谢您的努力
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-11
        • 2013-09-11
        • 2018-10-27
        • 1970-01-01
        • 2017-12-28
        • 2016-10-09
        • 2019-11-12
        相关资源
        最近更新 更多