Was soll Sie davon abhalten, etwas zu benutzen myproduct.myproduct
? Was Sie dazu ungefähr benötigen, besteht darin, Folgendes zu tun:
django-admin.py startproject myproduct
cd myproduct
mkdir myproduct
touch myproduct/__init__.py
touch myproduct/models.py
touch myproduct/views.py
und so weiter. Würde es helfen, wenn ich sagte, views.py
dass nicht angerufen werden muss views.py
? Vorausgesetzt, Sie können im Python-Pfad eine Funktion benennen (normalerweise package.package.views.function_name), die behandelt wird. So einfach ist das. All dieses "Projekt" / "App" Zeug ist nur Python-Pakete.
Wie solltest du das machen? Oder besser gesagt, wie könnte ich das machen? Nun, wenn Sie ein erhebliches Stück wiederverwendbarer Funktionalität schaffen, sagen wie ein Markup - Editor, das ist , wenn Sie einen „Top - Level - App“ erstellen , welche enthalten könnte widgets.py
, fields.py
, context_processors.py
etc - alles Dinge , die Sie importieren wollen könnten.
Wenn Sie so etwas wie ein Blog in einem Format erstellen können, das für alle Installationen recht allgemein ist, können Sie es in einer App mit einer eigenen Vorlage, einem statischen Inhaltsordner usw. zusammenfassen und eine Instanz eines Django-Projekts konfigurieren, um dies zu verwenden Inhalt der App.
Es gibt keine festen Regeln, die besagen, dass Sie dies tun müssen, aber es ist eines der Ziele des Frameworks. Die Tatsache, dass alles, einschließlich Vorlagen, es Ihnen ermöglicht, von einer gemeinsamen Basis aus zu integrieren, bedeutet, dass Ihr Blog genau in jedes andere Setup passen sollte, indem Sie sich einfach um seinen eigenen Teil kümmern.
Um jedoch auf Ihr eigentliches Problem einzugehen, gibt es keinen Hinweis darauf, dass Sie nicht mit dem Projektordner der obersten Ebene arbeiten können. Genau das tun Apps, und Sie können es tun, wenn Sie es wirklich wollen. Ich neige jedoch aus mehreren Gründen dazu:
- Djangos Standard-Setup macht das nicht.
- Oft möchte ich eine Haupt-App erstellen, also erstelle ich eine, die normalerweise aufgerufen wird
website
. Zu einem späteren Zeitpunkt möchte ich jedoch möglicherweise die ursprüngliche Funktionalität nur für diese Site entwickeln. Um es entfernbar zu machen (unabhängig davon, ob ich es jemals tue oder nicht), neige ich dazu, ein separates Verzeichnis zu erstellen. Dies bedeutet auch, dass ich diese Funktionalität löschen kann, indem ich die Verknüpfung dieses Pakets aus der Konfiguration aufhebe und den Ordner entferne, anstatt die richtigen URLs aus einem globalen Ordner urls.py zu löschen.
- Sehr oft, selbst wenn ich etwas unabhängig machen möchte, braucht es einen Ort zum Leben, während ich mich darum kümmere / es unabhängig mache. Grundsätzlich der obige Fall, aber für Sachen, die ich generisch machen möchte.
- Mein Ordner der obersten Ebene enthält oft ein paar andere Dinge, einschließlich, aber nicht beschränkt auf wsgi-Skripte, SQL-Skripte usw.
- Die Verwaltungserweiterungen von django basieren auf Unterverzeichnissen. Daher ist es sinnvoll, Pakete entsprechend zu benennen.
Kurz gesagt, der Grund, warum es eine Konvention gibt, ist der gleiche wie bei jeder anderen Konvention - es hilft, wenn andere mit Ihrem Projekt arbeiten. Wenn ich sehe, fields.py
erwarte ich sofort, dass der darin enthaltene Code das Feld von Django unterordnet, während ich, wenn ich sehe, inputtypes.py
möglicherweise nicht so klar bin, was das bedeutet, ohne es anzusehen .