如何使用Django HttpResponseRedirect提供规范URL?

use*_*003 6 django httpresponse

这个问题与我刚才问过的问题非常相似:我可以使用Google搜索结果来显示最终的重定向网址吗?,但现在问题是Django特有的.

我的网站的网页网址使用以下格式:

www.mysite.com/id/pretty_title
Run Code Online (Sandbox Code Playgroud)

首页链接到这些页面,但href实际上包含一些参数:

 www.mysite.com/id/?some_ugly_parameters_to_let_me_know_what_search_it_is_from
Run Code Online (Sandbox Code Playgroud)

然后重定向到

www.mysite.com/id/pretty_title
Run Code Online (Sandbox Code Playgroud)

显示页面.

我的问题是 Google的搜索结果显示该页面的链接是丑陋的网址,而不是漂亮的重定向网址.

我所学到的是我需要提供规范链接.但是,当丑陋的网页从未真正存在时,我怎么能这样做,至少不是我写的那个?

服务器端发生的事情是丑陋网址的视图会重定向:

return HttpResponseRedirect(pretty_url)
Run Code Online (Sandbox Code Playgroud)

小智 10

我认为这是您正在寻找的正确构建的模板标记.{{request.build_absolute_uri}}


bak*_*kal 6

您可以将它作为Django模板返回的HTML的一部分放在该<head>部分中.你有没有base.html在你的Django?您可以设置一个{% block %}作为规范URL的占位符,然后在每个单独的页面中设置该值{% extends base.html %}

base.html文件

<html>
<head>
  <link rel="canonical" href="{% block canonical_url %}{% endblock %}">
</head>
...
Run Code Online (Sandbox Code Playgroud)