2009-08-26 13 views
1

Ich frage mich, ob dies eine gute Praxis ist. Ich habe normalerweise wiederverwendbare Django-Anwendungen und Python-Bibliotheken unter "lib" -Verzeichnis und es funktioniert gut. Dann habe ich das "templates" -Verzeichnis direkt unter dem root-Projekt und ich kopiere die Standard-App-Vorlagen von lib/django-app/templates in mein Projekt "templates" -Verzeichnis und ändere meine Layout-Änderungen.Django wiederverwendbare App und Django Projektstruktur

Jetzt muss ich irgendwann das Verhalten von wiederverwendbaren Apps für die betreffende Seite ändern/ändern, also würde ich gerne eine "neue App" unter meinem Projekt erstellen und die Sachen nach Bedarf ändern. Auf diese Weise kann ich die wiederverwendbare App aufwerten.

Ist dies ein Weg zu gehen? Gibt es bessere Wege?

Danke.

Antwort

3

Eine Kopie zu greifen und die wiederverwendbare App direkt zu modifizieren, ist meiner Meinung nach kein guter Weg. Auf diese Weise, wenn Sie wiederverwendbare App neue Funktionen erhält oder seine Fehler behoben sind, können Sie nicht einfach eine neue Version der App ziehen.

Besserer Weg, um die Teile zu ändern, die nicht Ihren Bedürfnissen entsprechen, indem Sie sie überschreiben, aber die App intakt lassen. Nehmen wir ein Beispiel für Djangos Kommentar-App von contrib. Wenn Sie im Kommentarmodell nicht alle erforderlichen Felder haben, müssen Sie es ändern, indem Sie ein benutzerdefiniertes Modell für einen Kommentar erstellen, der das Original erbt, und die erforderlichen Features auf diese Weise hinzufügen. Aus der Dokumentation:

from django.contrib.comments.models import Comment 

class CommentWithTitle(Comment): 
    title = models.CharField(max_length=300) 

Jetzt habe ich die Kommentare App geändert, und ich kann auch die Quelle für einen Kommentar App aktualisieren, ohne sich um Konflikte zu kümmern. Sie müssen nicht etwas hinzufügen, um es zu benutzen, es funktioniert genauso gut, wenn Sie etwas loswerden oder etwas verändern.

Bei Ansichten und Vorlagen ist es eine schlechte Übung, die von der App bereitgestellten Vorlagen direkt zu ändern. Ich bevorzuge dies, indem ich ein Schlüsselwortargument für die Ansicht verwende, die die Vorlage angibt. Wenn ich die Standardvorlage durch meine eigene ersetzen möchte, kann ich einfach die neue von der URL-Konfiguration angeben. Jetzt muss ich die Ansicht nicht mehr berühren, um die Vorlage zu ändern, und die URL-Konfiguration sagt eindeutig, dass ich meine eigene verwende, anstatt die Standardvorlage zu verwenden.

+0

Danke für die Klärung im Detail. Du hast alle meine Fragen beantwortet :) – wailer