Frage

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

Ich dachte darüber nach, die JS -Dateien von Django (anstelle von Apache) servieren zu lassen, damit ich die Template -Tags (Template -Tags ({% url %} !!!).

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 damit verbrauchen, JS -Dateien zu verschaffen, die sich nicht geändert haben. Was großartig wäre, ist eine Anwendung, die beim Neustart von Django -Server Dateien generiert und sie statisch danach dient!)

War es hilfreich?

Lösung 2

Ich habe in diesen Asset Manager -Anwendungen aus tiefer gesucht Djangopackages, haben das herausgefunden Django-Mediagenerator Bereits diese Funktion, auch wenn sie nicht gut dokumentiert ist: Sie können Ihre JS- oder CSS -Dateien als Django -Vorlagen generieren und sie dann statisch servieren (sie werden auch gebündelt, und das Caching wird verwaltet usw. Also zwei Vögel mit einem Stein +. Es ist wirklich einfach zu richten!).

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

ROOT_MEDIA_FILTERS = {
    'js': 'mediagenerator.filters.template.Template',
}

in Ihren Einstellungen.

Andere Tipps

Ich würde mich für eine Hybridtechnik entscheiden. Servieren Sie den größten Teil Ihres JavaScript statisch. Aber in Ihrer Django -Vorlage haben Sie eine <script> Block, der verschiedene globale Variablen definiert, die vom serverseitigen Code generiert werden - url ist ein gutes Beispiel. Dann können sich Ihre statischen JS auf die Variablen beziehen, die im dynamischen Code generiert werden.

Das dynamische Generieren von JavaScript auf Ihrem Server kann ein enorm leistungsstarkes Tool sein, und ich habe in meinen Projekten sowohl den Aufwärtstrend als auch die Nachteile erlebt.

Im Allgemeinen möchten Sie so viel wie möglich statisch behalten, um die Arbeit für jede Anfrage zu minimieren. Dazu gehört, dass der Browser -Cache so weit wie möglich ist, was in Ihrem Fall zu einem Problem werden kann.

Normalerweise tue ich normalerweise einen Block im Header in meiner Basisvorlage. In Vorlagen, die benutzerdefinierte JavaScript durchführen müssen, die nur zur Laufzeit bekannt sind (Anpassung basierend auf protokollierten Benutzern), füge ich es dem Block hinzu. Hier kann ich JavaScript dynamisch generieren, von dem ich weiß, dass er nicht zwischengespeichert wird, damit ich einige Annahmen treffen kann. Der Nachteil ist mehr Komplexität.

Wenn Sie nur auf URLs hinweisen 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.) festlegen, damit der Browser die Datei für einige angemessene Zeit zwischenspeichert. Wenn Sie Ihren Code aktualisieren, stellen Sie sicher, dass sich der ETAG ändert.

In dem Code, der die Konfiguration verwenden muss Wille Bekämpfen Sie Probleme, die schwer zu debuggen sind, wenn das Konfigurations -JavaScript aus irgendeinem Grund nicht korrekt geladen ist.

Die .js, die an den Browser gesendet werden, würden variieren. Das könnte das Debuggen mehr umständlich machen. Vielleicht kein Problem, aber etwas, das man potenziell berücksichtigen kann ...

Heutzutage ist der beste Weg, dies zu tun, django.js zu verwenden

Hier ist der Dokument, in dem sie über die URL -Umkehrung sprechen: http://djangojs.readthedocs.org/en/0.8.1/djangojs.html#reverse-urls

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top