2014-09-26 71 views
0

我有巨大的urls.py用線的十幾映射到的意見,如:Django的:如何動態的URL帶或不帶urls.py

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

即網址完全相同的觀點內匹配的函數名。

我不想創建一個將url作爲參數的調度程序,並找到相應的性能原因方法。

問:

有沒有辦法要麼縮短urls.py到這樣一行

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

或完全刪除的urls.py

+0

'爲了性能原因',有你的基準來支持它嗎? – 2014-09-26 18:46:47

+0

是的,這是完全可行的,您可以直接從模板中調用視圖,而不需要url。示例'{%url'myapp.views.viewname'%}' – karthikr 2014-09-26 18:58:46

+0

@karthikr - 在urls.py的某處不是沒有匹配的模式,您不能!我認爲OP想要自動化映射URL模式來查看函數,而不是避免給他們提供'name'參數。 – 2014-09-26 19:54:45

回答

0

urlpatterns變量只是Python的,所以如果你能確定你想要映射到網址,這可調用就可以自動執行它:

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檢查是向非意外開放太多的一小步,但我不想太依賴它太深。

+0

謝謝!這正是我要找的。是的,我保證要小心;) – dsamersoff 2014-09-27 07:15:18

+0

如果這回答了你的問題,你可能想要將它標記爲接受,如下所述:http://meta.stackexchange.com/questions/5234/how-does-accepting-an -answer-working – 2014-09-27 17:59:30

+0

您是否對如何重載django url調度程序有所瞭解,而不是爲每個請求生成urlpatterns? – dsamersoff 2014-09-28 06:46:58

1

在每個URL的末尾$符號代表在末端
例如精確匹配,

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

僅匹配/ do_foo而

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

將匹配
doo_foo/hello
doo_foo/abcd/bar

你可以用它來減少你的urls.py的大小

你無法擺脫urls.py的全部,但可以使用

您可以映射所有URL映射的所有URL相同的查看功能以相同的查看功能使用

url(r'', views.do_foo)