Django的备用URL路由器

时间:2011-10-28 07:33:13

标签: django url-routing

您将如何使用django模型和模板,而不是URL路由系统?我想将urls.py系统换成类似PHP的东西,其中URL告诉你代码正在运行的确切位置。或者像rails一样使用更自动化的东西 - 其中URL总是包含相同的组件,如app name,model name和view name。

我只是不同意django philosophy statement中的“将URL绑定到Python函数名称是一件糟糕而丑陋的事情”。漂亮的URL对我来说并不是那么重要,IMVHO不值得在多个urls.py文件和几十个正则表达式中寻找间接迷宫的复杂性,以找出在特定URL后面运行的代码。这是个人选择,对吗? Django通常非常模块化,允许您将其他主要组件换成其他组件。那么,我如何换出获取请求URL的部分并决定运行哪个视图?

那里有django的备用URL路由器吗?

2 个答案:

答案 0 :(得分:4)

您需要的只是urls.py中的一行匹配所有内容,然后将您的处理程序/调度程序作为视图编写。该处理程序根据URL的各个部分做任何你想做的事情。

答案 1 :(得分:2)

我从来没有听说过有人成功地交换过Django的URL路由系统。肯定没有钩子 - core.handlers.base.BaseHandler.get_response直接调用urlresolvers.RegexURLResolver。可以想象,您可以在堆栈底部添加一个中间件,该中间件将分派到您自己的URL解析系统并返回响应,从而绕过Django系统,但它有点笨拙。

如果您正在寻找更像Rails的东西,您可能想尝试其他框架之一 - Pyramid,例如,使用与Rails非常相似的路由系统。金字塔比Django更可插拔,所以你应该能够插入基于Django的Jinja2模板系统。但是,没有办法单独使用Django的ORM,所以你需要使用SQLAlchemy(它可以以一种不同的方式使用)。