重定向vs反向django

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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。但这只是启用通用模式的捷径。

【讨论】:

非常感谢您的努力

以上是关于重定向vs反向django的主要内容,如果未能解决你的问题,请参考以下文章

Django 在反向重定向中使用新创建的对象

Django 项目 实现重定向并进行反向解析

ajax请求返回django.urls.exceptions.NoReverseMatch后Django反向和重定向

反向解析与重定向 | Django开发

django重定向导致重定向到下一页,但然后返回原始?

Nginx 反向代理重定向到帐户/登录