Au risque d'ajouter une réponse de type "moi aussi", je poste une version modifiée du script soumis ci-dessus qui vous donne une vue listant toutes les URLs du projet, quelque peu jolies et triées par ordre alphabétique, et les vues qu'elles appellent. C'est plus un outil de développeur qu'une page de production.
def all_urls_view(request):
from your_site.urls import urlpatterns #this import should be inside the function to avoid an import loop
nice_urls = get_urls(urlpatterns) #build the list of urls recursively and then sort it alphabetically
return render(request, "yourapp/links.html", {"links":nice_urls})
def get_urls(raw_urls, nice_urls=[], urlbase=''):
'''Recursively builds a list of all the urls in the current project and the name of their associated view'''
from operator import itemgetter
for entry in raw_urls:
fullurl = (urlbase + entry.regex.pattern).replace('^','')
if entry.callback: #if it points to a view
viewname = entry.callback.func_name
nice_urls.append({"pattern": fullurl,
"location": viewname})
else: #if it points to another urlconf, recur!
get_urls(entry.url_patterns, nice_urls, fullurl)
nice_urls = sorted(nice_urls, key=itemgetter('pattern')) #sort alphabetically
return nice_urls
et le modèle :
<ul>
{% for link in links %}
<li>
{{link.pattern}} ----- {{link.location}}
</li>
{% endfor%}
</ul>
Si vous voulez être vraiment fantaisiste, vous pouvez rendre la liste avec des boîtes de saisie pour toutes les expressions rationnelles qui prennent des variables à passer à la vue (encore une fois comme outil de développement plutôt que comme page de production).
2 votes
Très utile script, merci