Python 将django中的无效URL重新路由回主页
使用Python 将django中的无效URL重新路由回主页,python,django,Python,Django,使用localhost:8000/admin/和localhost:8000/工作正常 但我想忽略其他无意义的链接,比如localhost:8000/adm,让它们永久路由回localhost:8000/adm 有什么想法吗?这可以简单地通过正则表达式实现吗 更多的例子。。。我想要达到的目标 localhost:8000/anything -> localhost:8000/ localhost:8000/anything/ -> localhost:8000/ localhost
localhost:8000/admin/
和localhost:8000/
工作正常
但我想忽略其他无意义的链接,比如localhost:8000/adm,让它们永久路由回localhost:8000/adm
有什么想法吗?这可以简单地通过正则表达式实现吗
更多的例子。。。我想要达到的目标
localhost:8000/anything -> localhost:8000/
localhost:8000/anything/ -> localhost:8000/
localhost:8000/admin/anything -> localhost:8000/admin/
localhost:8000/admin/anything/ -> localhost:8000/admin/
简而言之,我想去掉多余的URL部分,这样它们甚至不会在浏览器中显示5xx重定向
在nginx中可以轻松完成,但我想知道直接在django中是否可以轻松完成。使用regex的解决方案是:
url(r'^admin/.', admin.site.urls),
...
url(r'.',HomeView.as_view(),name='HomeView'),
但这会将原始url保留在地址栏中
要摆脱它,请将RedirectView子类化:
url(r'^admin/$', admin.site.urls),
url(r'^admin/.', AdminRedirectView.as_view(), name='admin-redirect'),
...
url(r'^$',HomeView.as_view(),name='HomeView'),
url(r'^.$', HomeRedirectView.as_view(), name='home-redirect'),
# views.py
from django.views.generic.base import RedirectView
class HomeRedirectView(RedirectView):
permanent = True
query_string = False
pattern_name = 'HomeView'
你为什么要那样?当一个页面不存在时,返回一个404notfound是一个很好的实践。如果任何url指向你的主页,这对搜索引擎来说都是非常糟糕的。只需设计一个漂亮的404.html页面,让用户知道他们输入了错误的URL,并获得在哪里查找内容的线索。例如,好吧,至少我想要。。。localhost:8000/任何提供404页面的内容。。。目前它显示的主页就像我请求的localhost:8000或者@deyaelden:这是因为最后一个视图没有
/
部分。r'
匹配所有内容如果您只想/
匹配您的主页,请使用r'^$'
,即空URL(开始和结束时没有任何内容)1.你能详细说明一下。。。。。。r“^admin/$”…'^管理员/“。。。。。。r'^$'。。。。。。r'^.$'…Django添加了第一个斜杠,因此^admin/$
表示/admin/
,确切地说,^$
表示/
。
(点)表示任意次数的任意字符。这一点是按从上到下的顺序排列的,因为最后一个^。$
捕获所有可能的url<代码>^是开始,$
是结束。
url(r'^admin/$', admin.site.urls),
url(r'^admin/.', AdminRedirectView.as_view(), name='admin-redirect'),
...
url(r'^$',HomeView.as_view(),name='HomeView'),
url(r'^.$', HomeRedirectView.as_view(), name='home-redirect'),
# views.py
from django.views.generic.base import RedirectView
class HomeRedirectView(RedirectView):
permanent = True
query_string = False
pattern_name = 'HomeView'