給定一個像/home/
這樣的URI我想查找與此相對應的查看功能,最好是以app.views.home
或<app_label>.<view_func>
的形式。有沒有一個函數可以給我這個?從請求uri獲取查看功能?
12
A
回答
23
您可以使用由django提供的resolve方法來獲取該函數。您可以使用返回的函數的__module__
屬性來獲取應用程序標籤。這將返回一個字符串,如project.app.views
。因此,像這樣:
from django.core.urlresolvers import resolve
myfunc, myargs, mykwargs = resolve("/hello_world/")
mymodule = myfunc.__module__
0
基於KillianDS's answer,這裏是我的解決方案:
from django.core.urlresolvers import resolve
def response(request, template=None, vars={}):
if template is None:
view_func = resolve(request.META['REQUEST_URI'])[0]
app_label = view_func.__module__.rsplit('.', 1)[1]
view_name = view_func.__name__
template = '%s.html' % os.path.join(app_label, view_name)
return render_to_response(template, vars, context_instance=RequestContext(request))
現在你可以叫return response(request)
在您的視圖funcs中結束,它會自動加載app/view.html
作爲模板並傳入請求上下文。
3
由於Django 1.3(2011年3月)模塊中的resolve
函數返回ResolverMatch
對象。其中提供對已解析的URL匹配的所有屬性的訪問,包括視圖可調用路徑。
>>> from django.core.urlresolvers import resolve
>>> match = resolve('/')
>>> match.func
<function apps.core.views.HomeView>
>>> match._func_path
'apps.core.views.HomeView'
相關問題
- 1. 從IClientMessageInspector獲取請求URI
- 2. nsIWebprogressListener.onProgressChange():獲取請求的URI
- 3. 使用PrettyFaces獲取原始請求URI
- 4. Struts2獲取原始請求URI
- 5. .htaccess在URI中獲取請求
- 6. 獲取請求URI。 Google Endpoints API
- 7. 如何獲取RESTful webservice的請求URI
- 8. 在jinja2中獲取請求URI?
- 9. 如何在Grails中獲取請求URI?
- 10. 如何獲取請求的URI
- 11. 獲取io.netty.handler.codec.http.HttpRequest的基礎URI urip請求
- 12. 從請求URI中提取錨標籤
- 13. Django,查看從請求獲取字典列表
- 14. 獲取請求對象中的圖的功能,但從`manage.py shell`
- 15. 如何從雲功能請求中獲取參數? Firebase
- 16. 發送從黃瓜功能產生的步驟獲取請求
- 17. 從WCF請求獲取請求域名?
- 18. 功能從MY_Controller查看 - 笨
- 19. 如何從發出Ajax請求的CodeIgniter視圖獲取URI段?
- 20. 如何從Django中的請求對象獲取URI?
- 21. 如何從JAX-RS獲取原始請求的URI javax.ws.rs.core.Response
- 22. 如何從javascript中的location.href中獲取請求uri?
- 23. django調用模板中沒有請求查看功能
- 24. 如何從端點/規則獲取查看功能?
- 25. 查看cfhttp請求
- 26. Ajax獲取請求查詢
- 27. 如何查看由open-uri生成的GET請求標題
- 28. 查看取決於網絡請求
- 29. Angular 2從http獲取請求的對象獲取請求
- 30. AJAX請求 - 如何查看請求?
鑑於您已經有了請求,您可以簡單地執行「request.resolver_match」而不是調用resolve – 2016-05-27 06:52:35