Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将django中的无效URL重新路由回主页_Python_Django - Fatal编程技术网

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'