2017-08-16 1 views
2

Ich arbeite an einem Django-Projekt. Ich würde gerne eine Daten aus Django's views.py in eine Javascript-Datei übergeben, die js-Funktion ausführen und dann den Rückgabewert in meine HTML-Seite rendern. Ich verwende kein Formular in diesem Projekt. Kann mir bitte jemand sagen, wie ich das angehen soll? Die meisten Antworten, die ich hier sehe, sind derzeit veraltet und ich habe verschiedene Ansätze ohne Glück versucht. Ich benutze Python v2.7. Vielen Dank im Voraus!Wie übergebe ich Django-Daten an eine externe JS-Datei?

Antwort

1

Wenn Ihr Projekt Jinja oder eine andere Templating-Engine verwendet, können Sie versuchen, die Daten in die Vorlage zu übertragen.

Gefunden Sie dieses Bit auf Writing your first Django app, part 3 und zwickte es ein wenig.

def index(request): 
    template = loader.get_template('app/index.html') 
    my_data = ['whatever your data is'] 
    context = { 
     'my_data': my_data, 
    } 
    return HttpResponse(template.render(context, request)) 

Und in index.html

<html> 
    <head> 
     // import jQuery 
    </head> 
    <body> 
     <div id='my_data_label'></div> 
     <script type="text/javascript"> 
      var my_data = "{{ my_data }}"; // gets set by jinja 
      $('.my_data_label').text(my_data); 
      // do whatever with the data 
     </script> 
    </body> 
</html> 

nicht sicher, ob dies ist genau das, was Sie suchen, aber hoffen, es hilft.

+1

OMG danke! Ich habe vergessen "my_data" an einen Kontext zu übergeben. Kennst du eine Art, wie ich "my_data" in eine .js Datei überführen kann? Wenn ich diesen Weg gehen würde, wäre es dann ein Problem, wenn ich mehr als eine Variable passiere? Danke noch einmal! :) – Marvin

+1

Siehe meinen Kommentar oben für die Verwendung einer Variablen mit einer externen Javascript-Datei (Spoiler: es ist einfach). Es gibt sicherlich keine Begrenzung für die Anzahl der Objekte, die Sie verwenden. –

0

Es könnte eine gute Idee sein, die Javascript-Daten innerhalb eines <script> Tags auf der Vorlage für die Seite direkt zu rendern. Wenn es auf mehreren Seiten verwendet werden soll, stellen Sie sicher, dass es in der Basisvorlage enthalten ist oder importieren Sie es mit einem Include.

Ihre Ansicht, die einen Standard-django Ansicht ähneln könnten:

def detail(request, poll_id): 
    try: 
     p = Poll.objects.get(pk=poll_id) 
    except Poll.DoesNotExist: 
     raise Http404("Poll does not exist") 
    return render(request, 'polls/detail.html', {'poll': p}) 

Die Vorlage würde einige zusätzliche Logik haben die Javascript-Objekt zu bauen:

<script> 
var questionset = { 
    {% for q in poll.question_set %} 
     q.id : { 
      "title": "{{ q.title }}", 
      "score": {{ q.score }} 
     } 
     {% if not loop.last %},{% endif %} 
    {% endfor %} 
} 
</script> 

Sie jetzt ein Javascript-Objekt zur Verfügung haben in die Vorlage, die dynamisch aus den Daten aufgebaut wird. Sie können es als Sie bitte:

<script> 
    function doSomething(questionset){ 
     ... 
    } 
</script> 

Es gibt Möglichkeiten, um Ihre Daten in eine JavaScript-Datei, aber bedenken Sie zu speichern, dass dies durch den Browser des Clients zwischengespeichert bekommen. Keine gute Idee, dynamische Daten zu haben.

+0

Meine Django-Fähigkeiten sind ein wenig eingerostet, also bitte überprüfe meinen Code vor der Verwendung. Alle Korrekturen werden geschätzt. –

+0

Hallo Roy! Vielen Dank für Ihren Kommentar. Ich werde auf diesen Code herumspielen und Sie aktualisieren, wenn es irgendetwas gibt :) – Marvin

+0

Roy, vermeide ich, ein Wie kann ich die Variable "a" an eine externe .js-Datei übergeben? – Marvin

Verwandte Themen