(上下文:我对Django和Web开发都很新。)
1)有人可以解释以下声明的推理吗? This Q/A回答了 如何处理它的问题,但不是为什么它可能是好/坏主意。
The docs状态,“page_not_found视图应该 足以满足99%的Web应用程序,但如果要覆盖它, 你可以在你的URLconf“。
中指定handler404也就是说,page_not_found视图仅传递请求的URL并忽略 提出异常时提供的任何消息。在我看来,这 使用选项为404.html模板提供有用的提示 默认情况下对每个人都有好处。
2)我正在制作自定义视图,以便我可以针对以下情况传递有用的消息。我不应该有某种原因吗?
我正在使用矩阵网址,因此基本资源是 一个普通的分层URL,后跟基本的矩阵选项 格式: ; filter_type1 = item:value,item:value; filter_type2 = item:value ...
因此,根据距离提供有用的消息非常容易 在发生错误之前进行解析。通过似乎对我有帮助 在如下消息上:
如果我在其他地方错过了这个解释,请道歉。我看了,我asked on google django-users但没有回复。
答案 0 :(得分:1)
我不确定问题是什么。默认情况下,page_not_found视图是基本的,因为没有那么多情况需要解释为什么找不到页面,除非它没有找到。
我假设'矩阵选项'是指URL / GET参数,如:
http://domain.com/page/?option1=value&option2=value..
如果输入错误的参数组合而不是抛出404,为什么不默认为基本网址/模板(http://domain.com/page/),并显示错误消息“Option1只能是x, Y,Z”。通过这种方式,它们会显示一个熟悉的页面,并且可以重新选择它们而无需从404页面导航回来(并且它不会因为它不起作用而令人困惑)。
您可以使用django的messaging framework轻松完成此操作(我过去已经这样做过)。在检查视图中的参数时,将错误消息传递给模板。
答案 1 :(得分:1)
如果您的数据如下:
http://example.com/foo;bar;baz
然后你做错了:)
然后,您需要使用正则表达式来解析要处理的数据。
有些人在遇到问题时会想“我知道,我会用 正则表达式。“现在他们有两个问题。
(Zawinski,1997)
相反,正如pastylegs所建议的那样,使用GET参数。
更好的是,使用django表单处理和:
您可以使用GET请求或POST请求执行此操作。 POST具有“干净”网址和更长数据体的优势。 GET意味着可以为网址添加书签。
这一切归结为使用框架的正确部分来完成正确的任务。 URL路由使用正则表达式来计算哪些URL命中哪些视图。您制作网址模式越简单,维护起来就越容易。用户输入应由表格处理。
答案 2 :(得分:1)
我认为你理解这个问题的原因是,你试图混合两个不同的问题。
首先,是否找到实际页面的问题 其次,问题是所提供的参数是否有效。
所以,如果(部分)网址是:
.../whatever/?param1=value1¶m2=value2
如果页面/whatever/default
未找到,您将(应该)显示"404 Page not found"
类型的错误消息。在这种情况下,你不能告诉所提供的参数或值是否正确。请求的页面不存在,因此您不知道参数所针对的页面。你甚至不能假设指定了正确的domain name
。可能存在许多参数有效的任意域,URL和页面,以及参数无效的许多其他域,URL和页面。
如果找到/whatever/default
页面,则:
如果指定错误的参数可能导致该页面加载/重定向不存在的页面,那么该页面应该阻止该页面。如有必要,应该由该页面来验证所提供的参数,并采取适当的措施并显示相应的消息。