首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么Django不传递带有默认404视图的错误消息?

为什么Django不传递带有默认404视图的错误消息?
EN

Stack Overflow用户
提问于 2011-10-16 11:31:35
回答 3查看 414关注 0票数 2

(上下文:我对Django和web开发仍然非常陌生。)

1)有人能解释一下下面这句话的理由吗? 本问答回答了如何处理它的问题,但没有回答为什么它可能是一个好/坏的主意。

医生们状态,“page_not_found视图应该足以满足99%的Web应用程序,但是如果您想要覆盖它,可以在URLconf中指定handler404”。

也就是说,page_not_found视图只传递请求的URL,并忽略引发异常时提供的任何消息。在我看来,在默认情况下为404.html模板提供有用提示的选项对每个人都有好处。

2)我目前正在创建一个自定义视图,以便在以下情况下传递有用的消息。有什么理由我不应该吗?

我使用矩阵URL,所以基本资源是一个普通的分层URL,后面跟着基本格式的矩阵选项:;filter_type1=item:value,item:value;filter_type2=item:value.

因此,根据语法分析在发生错误之前得到的距离来提供有用的消息是非常容易的。对我来说,传递以下信息似乎很有帮助:

  • 允许的filter_types是: type1,type2,type3。或
  • filter_type a允许的项目是: item1、item2、item3。

如果我错过了其他地方的解释,我很抱歉。我已经看了,我被问到google django-用户,但没有得到答复。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-16 15:33:24

我不太确定问题是什么。默认情况下,找到视图是基本的,因为没有那么多情况需要解释为什么没有找到页面,只是没有找到。

我认为“矩阵选项”是指URL/GET参数,如:

代码语言:javascript
代码运行次数:0
运行
复制
http://domain.com/page/?option1=value&option2=value..

如果输入了不正确的参数组合,为什么不抛出404,为什么不默认为基本url/模板(http://domain.com/page/),并带有一条错误消息:"Option1只能是x、y、z“。这样,他们就会看到一个熟悉的页面,并且可以重新尝试他们的选择,而不必从404页面中导航(而且这并不会让人感到困惑,也不会让人困惑到为什么它不起作用)。

您可以使用django的消息传递框架轻松地完成这一任务(我过去就这样做过)。在检查视图中的参数时,向模板传递错误消息。

票数 1
EN

Stack Overflow用户

发布于 2011-10-17 05:07:35

如果您的数据是这样的:

代码语言:javascript
代码运行次数:0
运行
复制
http://example.com/foo;bar;baz

那么你做错了:)

然后,需要使用正则表达式来解析要处理的数据。

有些人在遇到问题时会想:“我知道,我会使用正则表达式。”现在他们有两个问题。

(Zawinski,1997年)

相反,就像Pasty腿建议的那样,使用GET参数。

更好的是,使用django表单处理和:

  • 创建一个具有验证规则的表单。
  • 呈现该表单中的输入页。
  • 使用表单解析用户输入
  • 如果窗体有效,则显示数据,否则在用户输入旁边显示验证错误。

您可以通过GET请求或POST请求来完成这一任务。POST具有‘干净’urls和更长的数据体的优点。GET意味着urls可以被书签标记。

这一切归结为使用框架的正确部分来完成正确的任务。URL路由使用正则表达式来计算哪个URL访问哪个视图。您制作的url模式越简单,它们就越容易维护。用户输入应由表单处理。

票数 1
EN

Stack Overflow用户

发布于 2013-02-24 20:56:59

我认为你之所以难以理解这一点,是因为你试图混淆两个不同的问题。

首先是实际页面是否被找到的问题。

第二,提供的参数是否有效的问题。

因此,如果(部分) url是:

代码语言:javascript
代码运行次数:0
运行
复制
    .../whatever/?param1=value1&param2=value2

如果页面/whatever/defaultnot ,则应该向您显示"404 Page not found"类型的错误消息。在本例中,不能告诉所提供的参数或值是否正确。请求的页面不存在,因此您不知道参数用于哪个页面。您甚至不能假设指定了正确的domain name。可能有许多任意域、urls和页面的参数是有效的,还有许多其他的参数是无效的。

如果页面/whatever/default 被找到,那么:

如果指定错误的参数可能导致该页加载/重定向一个不存在的页,则该页应阻止此操作。如有必要,应由该页面来验证所提供的参数,并采取适当的行动并显示适当的消息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7783972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档