Python Django:如何将URL动态映射到带有或不带URL的视图。py

Python Django:如何将URL动态映射到带有或不带URL的视图。py,python,django,django-urls,Python,Django,Django Urls,我有大量的url.py,其中有十几行,如: url(r'^do_foo$', views.do_foo), i、 url与视图中的函数名完全匹配 我不想创建一个以url为参数的调度程序,并出于性能原因找到合适的方法 Q: 有没有办法将urls.py缩短为一行 url(r'^(.*)$', 'views.\\1'), 或者完全去掉urls.py。urlpatterns变量只是Python,因此如果可以确定要映射到URL的可调用项,则可以将其自动化: import inspect import

我有大量的
url.py
,其中有十几行,如:

url(r'^do_foo$', views.do_foo),
i、 url与视图中的函数名完全匹配

我不想创建一个以url为参数的调度程序,并出于性能原因找到合适的方法

Q:

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

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

或者完全去掉
urls.py

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']

但是在这样做之前要仔细考虑——自动公开你的所有视图,因为URL可以打开你不想公开的部分应用程序。上面的inspect argspec检查是避免意外打开太多内容的一小步,但我不想过分依赖它

每个URL末尾的$符号表示末尾的完全匹配
比如说,

url(r'^do_foo$', views.do_foo)
将仅匹配/do_foo鉴于

url(r'^do_foo', views.do_foo)
将匹配
杜福/你好
斗富/abcd/酒吧

您可以使用它来减小URL.py的大小

您不能完全删除url.py,但可以使用

url(r'', views.do_foo)
您可以使用将所有URL映射到同一视图函数

url(r'', views.do_foo)

出于性能原因
,是否对其进行了基准测试以支持这一点?是的,这是完全可行的,您可以直接从模板调用视图,而无需url。示例
{%url'myapp.views.viewname'%}
@karthikr-url.py中的某个地方没有匹配的模式,您不能!我认为OP希望自动映射URL模式以查看函数,而不是避免给它们
name
参数。谢谢!这正是我要找的。是的,我保证会小心的;)如果这回答了您的问题,您可能希望将其标记为此处所述的已接受:您是否知道如何重载django url dispatcher,而不是为每个请求生成url模式?我认为您最终还是会在模块的
\uu dict\uuu
中查找可调用项,然后从分派方法调用视图,类似于基于类的视图基于HTTP方法分派的方式。我认为生成的urlpatterns将更容易调试,因为在调试模式下,Django将向您显示它在404等协议上检查的模式!再次感谢你。