Dato un uri come /home/
Voglio trovare la funzione di visualizzazione che corrisponde a, preferibilmente in una forma come app.views.home
o solo <app_label>.<view_func>
. C'è una funzione che mi darà questo?Ottieni la funzione di visualizzazione dalla richiesta uri?
12
A
risposta
23
È possibile utilizzare il metodo resolve fornito da django per ottenere la funzione. È possibile utilizzare l'attributo __module__
della funzione restituita per ottenere l'etichetta dell'app. Ciò restituirà una stringa come project.app.views
. Quindi, qualcosa di simile:
from django.core.urlresolvers import resolve
myfunc, myargs, mykwargs = resolve("/hello_world/")
mymodule = myfunc.__module__
0
Sulla base di KillianDS's answer, ecco la mia soluzione:
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))
Ora si può chiamare return response(request)
alla fine della vostra vista funcs e sarà automaticamente caricare app/view.html
come modello e passare nel contesto della richiesta.
3
Da Django 1.3 (marzo 2011) la funzione resolve
nel modulo urlresolvers
restituisce un oggetto ResolverMatch
. Che fornisce l'accesso a tutti gli attributi della corrispondenza dell'URL risolto, incluso il percorso della vista callable.
>>> from django.core.urlresolvers import resolve
>>> match = resolve('/')
>>> match.func
<function apps.core.views.HomeView>
>>> match._func_path
'apps.core.views.HomeView'
Problemi correlati
- 1. Ottieni binding dalla classe di visualizzazione
- 2. Ottieni il nome del file dalla stringa URI in C#
- 3. Ottieni la variabile nel percorso di un URI
- 4. Ottenere il relativo uri dalla URI assoluto
- 5. uri relativa per la richiesta node.js biblioteca
- 6. Ottieni URI dall'immagine selezionabile
- 7. URI richiesta troppo grande
- 8. Funzione visualizzazione chiamate dalla sottoview con BackboneJS
- 9. Ottieni i parametri HTTP GET dalla richiesta di Restlet
- 10. Ottieni le intestazioni di risposta dalla richiesta HTTP Ruby
- 11. Java: Ottieni URI da FilePath
- 12. Ottieni Uri dal percorso reale
- 13. Guzzle 6, ottieni la stringa di richiesta
- 14. Ottieni oggetto richiesta in visualizzazione basata su classe
- 15. Ottieni l'elemento Nth di una matrice restituita dalla funzione "string_to_array()"
- 16. funzione che restituisce un valore dalla richiesta di chiamata ajax
- 17. Ottieni le intestazioni http dalla richiesta corrente in PHP
- 18. WordPress Ottieni Post Meta dalla funzione di richiamata
- 19. Effettua una richiesta HTTPS tramite PHP e ottieni la risposta
- 20. alcun mapping trovato per la richiesta HTTP con URI [/favicon.ico]
- 21. Come ottenere la richiesta uri da location.href in javascript?
- 22. Ottieni oggetto modello da tastypie uri?
- 23. Codice Igniter - Ottieni ultimo segmento URI
- 24. Ottieni percorso reale per Android Uri
- 25. R - ottieni tutte le variabili create dalla funzione chiama
- 26. Filtro richiesta jersey solo su alcuni URI
- 27. Ottieni avanzamento download in Node.js con richiesta
- 28. Python: la funzione dalla riga di comando
- 29. nodejs, socket.io: come ottenere la richiesta e la risposta dalla funzione socket?
- 30. Errore di visualizzazione visualizzazione pallone "La funzione di visualizzazione non ha restituito una risposta"
dato che hai già la richiesta puoi semplicemente fare "request.resolver_match" invece di chiamare risolvere –