重定向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的主要内容,如果未能解决你的问题,请参考以下文章