我有大量的urls.py
,有十几行,如:
url(r'^do_foo$', views.do_foo),
即。 url与视图中的函数名称完全匹配。
我不想创建一个将url作为参数并根据性能原因找到合适方法的调度程序。
问:
有没有办法将urls.py
缩短为一行,如
url(r'^(.*)$', 'views.\\1'),
或完全摆脱urls.py
。
答案 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检查是朝向不小心开放的一小步,但我不想过于依赖它。