姜戈自动路线

发布于 2024-10-08 00:41:45 字数 137 浏览 1 评论 0原文

使用 ASP.NET MVC,我只需向视图添加一个操作,它就会自动工作。 Django 似乎让我在 urls.py 表中写入每条路线 - 有没有办法让它映射,例如“/foo/bar”到 foo.views.bar ,而无需我明确说明?

With ASP.NET MVC, I can just add an action to a view and it will automagically work. Django seems to make me write every route in the urls.py table - is there a way to make it map, for example "/foo/bar" to foo.views.bar without me explicitly saying so?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一笔一画续写前缘 2024-10-15 00:41:45

我认为 django 让你写所有东西的原因是这样的: “魔法”有什么问题“?

其次,您建议的地图使得处理视图函数的参数变得困难。最简单的方法是按照约定强制所有视图仅使用 GETPOST 参数,否则采用一些标准参数集(例如 request模板名称)。

要实现您想要的映射,您可以迭代视图模块并生成模式对象。请注意,这是一个非常丑陋的黑客行为,很大程度上违背了 url 映射器的目的。在 urls.py 中:

from django.conf.urls.defaults import *

import myapp.views

urlpatterns = patterns('myapp.views',                                                                                                                                   
    *map(lambda x: url(r'^myapp/%s/
 % x, x, name='myapp_%s' % x),
         [k for k,v in myapp.views.__dict__.items() if callable(v)]))

I think the reason django makes you write everything is something along these lines: What's wrong with "magic"?

Secondly, the map you are suggesting makes it difficult to deal with arguments to the view functions. The simplest would be to enforce by convention that all views only use GET and POST arguments and otherwise take some standard set of arguments (e.g. request, template_name).

To implement this map you want, you can iterate over your views module and generate the patterns object. Mind you, this is a really ugly hack and largely defeats the purpose of the url mapper. In urls.py:

from django.conf.urls.defaults import *

import myapp.views

urlpatterns = patterns('myapp.views',                                                                                                                                   
    *map(lambda x: url(r'^myapp/%s/
 % x, x, name='myapp_%s' % x),
         [k for k,v in myapp.views.__dict__.items() if callable(v)]))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文