Django:如何使用或不使用urls.py动态地将URL映射到视图

时间:2014-09-26 18:40:20

标签: python django django-urls

我有大量的urls.py,有十几行,如:

url(r'^do_foo$', views.do_foo),

即。 url与视图中的函数名称完全匹配。

我不想创建一个将url作为参数并根据性能原因找到合适方法的调度程序。

问:

有没有办法将urls.py缩短为一行,如

url(r'^(.*)$', 'views.\\1'),

或完全摆脱urls.py

2 个答案:

答案 0 :(得分:1)

每个网址末尾的$符号代表最后的完全匹配
例如,

url(r'^do_foo$', views.do_foo)

仅匹配/ do_foo而

url(r'^do_foo', views.do_foo)

会匹配
doo_foo /你好
doo_foo / ABCD /酒吧

您可以使用它来减小urls.py

的大小

你无法完全摆脱urls.py,但可以使用

将所有网址映射到同一个视图功能

您可以使用

将所有网址映射到同一个视图功能
url(r'', views.do_foo)

答案 1 :(得分:0)

urlpatterns变量只是Python,因此,如果您可以确定要映射到URL的哪些可调用对象,则可以将其自动化:

import inspect
import views

urlpatterns = [url(r'^%s$' % name, view) for name, view in views.__dict__.items()
               if callable(view) and
               inspect.getargspec(view)[0][0] == 'request']

但在这样做之前要仔细考虑 - 自动公开您的所有观点,因为网址可以打开您并不打算公开的部分应用。上面的检查argspec检查是朝向不小心开放的一小步,但我不想过于依赖它。