Django - Import-Ansichten aus verschiedenen apps
Ich bin neu in Django und arbeitete mich durch "The Django Book" von Holovaty und Kaplan-Moss. Ich habe ein Projekt namens "mysite", enthält zwei Anwendungen, sogenannte "Bücher" und "Kontakt". Jeder hat seine eigene view.py Datei. In meinem urls.py die Datei habe ich Folgendes stehen:
from books import views
from contact import views
...
urlpatterns = patterns('',
...
(r'^search/$', views.search),
(r'^contact/$', views.contact),
...
Wenn ich meinem code bekomme ich diesen Fehler:
NameError at /Suche/
...
Ausnahme Wert: 'Modul' - Objekt hat kein Attribut 'Suche'
Was ich glaube, was passiert ist, dass da die Ansichten von Kontakt war das zuletzt importierte, Django ist auf der Suche, Kontakt - anzeigen, die nicht enthalten sind-Suche (Suche in Büchern, die' Ansicht).
Was ist die richtige Art und Weise zu importieren views.py Datei von zwei verschiedenen Anwendungen auf einem Django-urls-Datei?
Vielen Dank für Ihre Hilfe!
InformationsquelleAutor Jim | 2012-07-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haftungsausschluss: Nicht ein Django Antwort
Das problem ist mit diesen beiden Zeilen:
Den zweiten import-shadowing das erste, so, wenn Sie
views
später sind Sie nur mit derviews
auscontact
.Eine Lösung könnte sein, nur:
Ich bin mir nicht sicher, aber ich denke auch, dass Sie eigentlich nicht importieren müssen nichts und können nur Zeichenfolgen verwenden, die in Ihrem Muster, so etwas wie:
'books.views.search'
.Andere Möglichkeit ist zu Folgen, Simon Visser Vorschlag:
Es gab ein paar Rechtschreibfehler (die ich behoben), als die anderen, ist eine funktionierende Lösung. Sie müssen nicht kopieren Sie und fügen unsere Antworten in deinem code, es wäre besser, Sie zu verstehen und Ihren eigenen Weg finden, Ihr problem zu lösen. Sie sind auch frei akzeptieren die Antwort, die Ihnen geholfen die.
Rik, Ihren zweiten Vorschlag, über Simon Visser, hat Arbeit als gut. Danke.
InformationsquelleAutor Rik Poggi
Sind Sie überschreiben den Namen
views
. Muss man Sie als unterschiedliche Namen oder als absoluten Namen.... oder ...
Verwenden Sie dann den richtigen Namen bei der Definition von URLs. (
books.views.search
oderbooks_views.search
je nach der Methode, die Sie wählen)Es ist häufiger zu tun
from books.views import search
undfrom contact.views import contact
obwohl. Nachdem alle, die Sie wollen, importieren Sie die view-Funktionen, die nicht der Ansicht Module.wenn es für Sie gearbeitet, werden Sie sicher, akzeptieren Sie die Antwort durch klicken auf das Häkchen.
InformationsquelleAutor FogleBird
Den URLconfs Dokumentation gibt ein Beispiel von der gleichen situation
Können Sie überspringen die Importe, und trennen Sie die urls durch die app als solche:
Vielen Dank für diese, 4 Jahre später :3
Nur darauf hinweisen, dass django.conf.urls.Muster() entfernt in Django 1.10. docs.djangoproject.com/en/1.10/releases/1.10/...
InformationsquelleAutor j_syk
Der Grund, warum ich diese Frage zu beantworten ist, weil es beantwortet wurde vor Jahren und diese Antworten sind nicht korrekt oder nützlich sind, mehr für neuere Django-Versionen, oder gibt es eine bessere Praxis, die Sie kennen sollten.
So, wenn Sie mehr als eine app in Ihren Django-Projekt, dann sollten Sie eine neue urls.py Datei für jede Ihrer apps. Es bedeutet, dass, wenn Sie beginnen, eine neue app, dann müssen Sie manuell erstellen Sie eine neue Datei namens urls.py in den Unterordner Ihrer neuen app. Viele Anfänger zunächst nicht verstehen, warum das gut ist, aber dies ist eine gute Praxis, wenn Sie planen, die Schaffung von mehr apps in einem Django-Projekt.
Wenn Sie ein Projekt starten, das urls.py Datei automatisch erstellt in Ihrem Projekt-Ordner, aber wenn Sie erstellen/starten Sie eine neue app in Django, dann ist es eine gute Praxis, wenn Sie erstellen eine separate urls.py für diese app in einem eigenen Ordner. (Und so werden Sie nie das "importieren verschiedene app-Ansichten in urls.py" problem in den ersten Platz).
Nachdem Sie erstellt die urls.py Datei für Ihre app, dann müssen Sie gehören, die app urls.py Datei in Ihr Projekt urls.py Datei in der folgenden Weise:
Lassen Sie uns sehen, ein Beispiel, wenn Sie erstellen eine neue app namens "my_new_app'.
Dies ist, wie Ihr Projekt die wichtigsten urls.py die Datei sollte wie folgt Aussehen:
In Ihr Projekt urls.py Datei, die Sie importieren aus der 'include' - Methode, dann können Sie Ihre my_new_app urls.py Datei in Ihrem Projekt die wichtigsten urls.py Datei. In Ihrem my_new_app Ordner müssen Sie manuell erstellen urls.py Datei wie ich oben festgestellt habe. Dann müssen Sie diese Datei verwenden, für alle Ihre urlpatterns Ihrer my_new_app. Dann natürlich diese Weise, es wird automatisch für Ihr Projekt die wichtigsten urls.py Datei.
Also das ist dann, wie Ihre eigenen my_new_app urls.py die Datei sollte wie folgt Aussehen:
Unter der Annahme, dass Sie auch eine erste Ansicht mit dem Namen 'index' in Ihre 'my_new_app/views.py Datei.
my_new_app/views.py Datei sieht wie folgt aus:
Und Sie können Ihre my_new_app in Ihrem browser auf:
(Natürlich können Sie geben die url Ihres my_new_app in Ihr Projekt urls.py Datei).
Nun, Sie können erstellen Sie eine weitere app, die in Ihren Django-Projekt namens my_second_app und wiederholen Sie die obigen Schritte für die app zu. Auf diese Weise werden Sie kein problem haben, importieren von views aus verschiedenen apps in urls.py -Dateien. Dies wäre eine sehr einfache "good practice-Lösung" für dieses problem im Jahr 2017 in Django 1.11.
InformationsquelleAutor Zollie