2010-12-16 3 views
1

versuchen, herauszufinden, der beste Weg, dies zu erreichen. Ich habe ein Django-Projekt einstudiert, das ziemlich gut gemacht ist.Meinung: Wohin mit diesem Code in Django App:

Es gibt eine Reihe von vorcodierten Modulen, die ein Benutzer in einer Seite enthalten kann (eine Seite und ein Modul sind Modelle in dieser App) links im Admin (dh: Seitenlinks, Anzeigen, konstanter Kontakt).

Eine neue Anforderung beinhaltet das Einfügen eines Moduls interner Links in die gleiche Vertiefung. Diese Links sind nicht wie die anderen Module mit einer Seite verknüpft, sie sind eine separate Viele-zu-Viele-Verknüpfung - dh ein Link kann in einem Satz auf allen Seiten wiederverwendet werden.

die Vorlage Pseudo-Code ist:

if page has modules: 
loop through modules: 
    write the pre coded content of module 

Da die Links in den gleichen sein müssen, auch die Module, ich habe ein „Link-Platzhalter-Modul“ geschaffen mit einer Schnecke von Link-Platzhalter.

Der neue Pseudo-Code ist:

if page has modules: 
loop through modules: 
    if module.slug is "link-placeholder": 
    loop through page.links and output each 
    else: 
    write pre-coded module 

Meine Frage ist, wo der beste Ort, um diese Ausgabe für die Links zu schreiben? Wie ich es sehe, sind meine Optionen:

  1. die in der Vorlage löschte Bauen (leicht, aber irgendwie bekommen chaotisch - Code nett und ordentlich jetzt ist)
  2. eine Funktion in der Seite Modell bauen, das ist aufgerufen, wenn der „Link-Platzhalter angetroffen wird) page.get_internal_link_ouutput. Im Wesentlichen würde diese Abfrage, baut und interne Link-Modul Ausgabe drucken.
  3. Machen Sie dasselbe mit einem benutzerdefinierten Template-Tag.

ich bin Neigung in Richtung 2 oder 3, aber es scheint nicht der richtige Ort zu sein, um es zu tun ein wenig verwirrt über den besten Platz, um Code in Django-Apps zu setzen, obwohl ich das Framework wirklich mag.

Vielen Dank im Voraus für eine Beratung.

Antwort

2

Ich würde empfehlen, ein benutzerdefiniertes Template-Tag zu verwenden.

Den Code direkt in die Vorlage schreiben ist nicht der richtige Platz für so viel Logik, und ich glaube nicht, dass ein Modell Template-spezifische Methoden hinzugefügt werden sollte. Es ist besser, eine vorlagenspezifische Logik in vorlagenspezifischen Klassen und Funktionen zu verwenden (z. B. Vorlagen-Tags).