Gibt es eine Möglichkeit, die vollständige Django-URL-Konfiguration zu erhalten?
Auf der Debugging-Seite 404 von Django werden beispielsweise keine enthaltenen URL-Konfigurationen angezeigt, sodass dies nicht die vollständige Konfiguration ist.
Antwort : Dank Alasdair ist hier ein Beispielskript:
import urls
def show_urls(urllist, depth=0):
for entry in urllist:
print(" " * depth, entry.regex.pattern)
if hasattr(entry, 'url_patterns'):
show_urls(entry.url_patterns, depth + 1)
show_urls(urls.urlpatterns)
Antworten:
Django ist Python, also ist Selbstbeobachtung dein Freund.
Importieren Sie in die Shell
urls
. Durch Durchlaufenurls.urlpatterns
und Durchlaufen möglichst vieler Ebenen der enthaltenen URL-Konfigurationen können Sie die vollständige URL-Konfiguration erstellen.Die Liste
urls.urlpatterns
enthältRegexURLPattern
undRegexURLResolver
Objekte.Für ein
RegexURLPattern
Objekt könnenp
Sie den regulären Ausdruck mit anzeigenFür ein
RegexURLResolver
Objektq
, das eine enthaltene URL-Konfiguration darstellt, können Sie den ersten Teil des regulären Ausdrucks mit anzeigenDann benutze
Dies gibt eine weitere Liste von
RegexURLResolver
undRegexURLPattern
Objekten zurück.quelle
RegexURLPattern
oder warenRegexURLResolver
. Verwendenhas_attr
ist eine viel bessere Idee. Sie sollten Ihre Funktion hier auf Stapelüberlauf als Antwort setzen. Ich würde es positiv bewerten.Django-Erweiterungen bieten ein Dienstprogramm, um dies als Befehl manage.py auszuführen.
django_extensions
Fügen Sie dann zu Ihrem INSTALLED_APPS in hinzusettings.py
. Geben Sie dann in der Konsole einfach Folgendes einquelle
Auf die Gefahr hin, eine "Ich auch" -Antwort hinzuzufügen, veröffentliche ich eine modifizierte Version des oben eingereichten Skripts, die Ihnen eine Ansicht bietet, in der alle URLs im Projekt aufgelistet sind, die etwas hübsch und alphabetisch sortiert sind, sowie die Ansichten, die sie aufrufen. Eher ein Entwicklertool als eine Produktionsseite.
und die Vorlage:
Wenn Sie wirklich ausgefallen sein möchten, können Sie die Liste mit Eingabefeldern für alle regulären Ausdrücke rendern, bei denen Variablen an die Ansicht übergeben werden (wiederum als Entwicklertool und nicht als Produktionsseite).
quelle
Diese Frage ist etwas alt, aber ich bin auf dasselbe Problem gestoßen und dachte, ich würde meine Lösung besprechen. Ein bestimmtes Django-Projekt benötigt offensichtlich ein Mittel, um alle seine URLs zu kennen, und muss in der Lage sein, einige Dinge zu tun:
Django erreicht dies hauptsächlich durch ein Objekt namens a
RegexURLResolver
.Sie können eines dieser Objekte folgendermaßen in die Hände bekommen:
Anschließend können Sie Ihre URLs einfach folgendermaßen ausdrucken:
Die Lösung von Alasdair ist jedoch vollkommen in Ordnung und hat einige Vorteile, da sie etwas Schöneres als diese Methode ausgibt. Aber über ein
RegexURLResolver
Objekt Bescheid zu wissen und es in die Hände zu bekommen, ist etwas Schönes, besonders wenn Sie sich für Django-Interna interessieren.quelle
Ich habe ein Paket (django-showurls) eingereicht, das diese Funktionalität zu jedem Django-Projekt hinzufügt. Es ist ein einfacher neuer Verwaltungsbefehl, der sich gut in manage.py integrieren lässt:
Sie können es über pip installieren:
Fügen Sie es dann zu Ihren installierten Apps in der Datei settings.py Ihres Django-Projekts hinzu:
Und du bist bereit zu gehen.
Weitere Infos hier - https://github.com/Niklas9/django-showurls
quelle
show_urls
Befehl enthält - django-extensions.readthedocs.io/en/latest/…Der einfachste Weg, um eine vollständige Liste der registrierten URLs zu erhalten, besteht darin, contrib.admindocs zu installieren und dann den Abschnitt "Ansichten" zu überprüfen. Sehr einfach einzurichten und bietet Ihnen außerdem vollständig durchsuchbare Dokumente für alle Ihre Vorlagen-Tags, Modelle usw.
quelle
Suchen Sie nach ausgewerteten oder nicht ausgewerteten URLs, wie im DEBUG-Modus angezeigt? Für die Auswertung kann django.contrib.sitemaps Ihnen dort helfen, andernfalls kann es sich um ein Reverse Engineering mit Djangos Code handeln.
quelle
Als ich die anderen Antworten hier ausprobierte, bekam ich diesen Fehler:
Es sieht so aus, als ob das Problem von der Verwendung
django.contrib.admin.autodiscover()
in myurls.py
herrührt. Daher kann ich das entweder auskommentieren oder Django ordnungsgemäß laden, bevor ich die URLs entleere. Wenn ich die Administrator-URLs in der Zuordnung sehen möchte, kann ich sie natürlich nicht auskommentieren.Ich fand einen benutzerdefinierten Verwaltungsbefehl , der die URLs ausgibt.
quelle
Wenn Sie Django im Debug-Modus ausführen (
DEBUG = True
in Ihren Einstellungen) und dann eine nicht vorhandene URL eingeben, wird eine Fehlerseite mit der vollständigen URL-Konfiguration angezeigt.quelle
/news/bad_url/
werden die enthaltenen URLs dernews
App angezeigt , jedoch nicht dersport
App.