Django: Ist es eine gute Idee, JS dynamisch zu generieren?

7

Wenn ich meine JS-Dateien für ein Django-Projekt schreibe, mache ich natürlich einige AJAX-Aufrufe, und im Moment sind die URLs für diese Aufrufe fest codiert (was sehr hässlich ist).

Ich dachte daran, die JS-Dateien von django (anstelle von Apache) bedienen zu lassen, damit ich die Template-Tags ( {% url %} !!!) nutzen konnte.

Gibt es einen Grund, warum ich das nicht tun sollte?

Oder gibt es einen richtigen Weg, dies zu tun?

(Ich kann mindestens einen geben: es wird viel Zeit beim erneuten Senden von JS-Dateien verbrauchen, die sich nicht geändert haben. Was toll wäre, ist eine Anwendung, die beim Neustart des django-Servers Dateien erzeugt und diese statisch nachher bedient! )

    
sebpiq 23.11.2010, 07:59
quelle

5 Antworten

6

Ich habe in diesen Asset-Manager-Anwendungen von djangopackages tiefer gesucht und herausgefunden, dass django-mediagenerator stellt diese Funktion zur Verfügung, auch wenn sie nicht gut dokumentiert ist: Sie können Ihre js- oder CSS-Dateien als Django-Templates generieren und dann serviere sie statisch (sie sind auch gebündelt, und Caching wird verwaltet usw. ... also zwei Vögel mit einem Stein + es ist wirklich einfach einzurichten!).

Um JS-Dateien als Django-Vorlagen generieren zu lassen (nachdem Sie django-mediagenerator eingerichtet haben), fügen Sie einfach den Filter hinzu:

%Vor%

in Ihren Einstellungen.

    
sebpiq 23.11.2010, 09:35
quelle
11

Ich würde für eine Hybridtechnik gehen. Servieren Sie die meisten Ihrer Javascript statisch. Aber in Ihrer Django-Vorlage, haben Sie einen <script> -Block, der verschiedene globale Variablen definiert, die vom serverseitigen Code generiert werden - url ist ein gutes Beispiel. Dann kann sich Ihr static JS auf die Variablen beziehen, die im dynamischen Code generiert werden.

    
Daniel Roseman 23.11.2010 09:12
quelle
4

Dynamisches Erzeugen von Javascript auf Ihrem Server kann ein enorm mächtiges Werkzeug sein, und ich habe sowohl in den Projekten als auch in der Entwicklung sowohl Vorteile als auch Nachteile erlebt.

Im Allgemeinen möchten Sie so viel wie möglich statisch halten, um die Arbeit bei jeder Anfrage zu minimieren. Dazu gehört, dass der Browser so viel Cache wie möglich speichert, was in Ihrem Fall zu einem Problem werden könnte.

Normalerweise mache ich einen Block in der Kopfzeile meiner Basisvorlage. In Vorlagen, die benutzerdefiniertes JavaScript ausführen müssen, das nur zur Laufzeit bekannt ist (z. B. Anpassung basierend auf dem angemeldeten Benutzer), füge ich es dem Block hinzu. Hier kann ich Javascript dynamisch generieren, von dem ich weiß, dass es nicht zwischengespeichert wird, damit ich einige Annahmen treffen kann. Der Nachteil ist mehr Komplexität.

Wenn Sie nur auf URLs verweisen müssen oder eine einfache Konfiguration usw. haben, würde ich vorschlagen, eine Ansicht zu erstellen, die eine Javascript-Datei mit diesen Einstellungen zurückgibt. Sie können die richtigen Header (Etag, Cache-Control, usw.) einstellen, damit der Browser die Datei für eine angemessene Zeit zwischenspeichert. Stellen Sie sicher, dass sich das Etag ändert, wenn Sie Ihren Code aktualisieren.

In dem Code, der die Konfiguration verwenden muss, müssen Sie immer überprüfen, ob die Variable, nach der Sie suchen, tatsächlich definiert ist, andernfalls wird Probleme haben, die aus irgendeinem Grund schwer zu debuggen sind Die Konfiguration Javascript wird nicht korrekt geladen.

    
knutin 23.11.2010 08:51
quelle
0

Die .js, die an den Browser gesendet werden, würden variieren. Das könnte das Debugging mühsamer machen. Vielleicht kein Problem, aber etwas, das man in Betracht ziehen könnte ...

    
seand 23.11.2010 08:06
quelle
0

Heutzutage ist es am besten, Django.js

zu verwenden

Hier ist das Dokument, in dem sie über die umgekehrte URL sprechen: Ссылка

    
Sylvain 05.12.2013 13:37
quelle

Tags und Links