webentwicklung-frage-antwort-db.com.de

Wie rufe ich eine Django Funktion auf Knopfdruck auf?

Ich versuche, eine Django) - Anwendung zu schreiben, und bin festgefahren, wie ich eine Ansichtsfunktion aufrufen kann, wenn auf eine Schaltfläche geklickt wird.

In meiner Vorlage habe ich eine Link-Schaltfläche, die Sie zu einer anderen Webseite führt, wenn Sie darauf klicken:

<a target="_blank" href="{{ column_3_item.link_for_item }}">Check It Out</a>

Wenn die Schaltfläche angeklickt wird, möchte ich auch eine Django= view-Funktion aufrufen (zusammen mit der Weiterleitung zu einer Zielwebsite). Die view-Funktion erhöht den Wert in der Datenbank, in der die Nummer von gespeichert ist mal auf die schaltfläche geklickt.

Das column_3_item.link_for_item ist ein Link zu einer externen Website (z. B. www.google.com). Wenn Sie jetzt auf diese Schaltfläche klicken, wird ein neues Fenster geöffnet, in dem Sie zur Google-Website gelangen.

Was ich tun möchte, ist eine Django Ansichtsfunktion aufzurufen, auch wenn auf die Schaltfläche geklickt wird, die die Datenbank aktualisiert, ohne die Seite zu aktualisieren. Wie kann ich dies erreichen?

26
Dev

hier ist ein minimalistischer Ansatz mit reinem Javascript. Ich benutze JQuery, aber Sie können jede Bibliothek verwenden ( oder gar keine Bibliotheken ).

<html>
    <head>
        <title>An example</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <script>
            function call_counter(url, pk) {
                window.open(url);
                $.get('YOUR_VIEW_HERE/'+pk+'/', function (data) {
                    alert("counter updated!");
                });
            }
        </script>
    </head>
    <body>
        <button onclick="call_counter('http://www.google.com', 12345);">
            I update object 12345
        </button>
        <button onclick="call_counter('http://www.yahoo.com', 999);">
            I update object 999
        </button>
    </body>
</html>

Alternativer Ansatz

Anstatt den JavaScript-Code zu platzieren, können Sie Ihren Link folgendermaßen ändern:

<a target="_blank" 
    class="btn btn-info pull-right" 
    href="{% url YOUR_VIEW column_3_item.pk %}/?next={{column_3_item.link_for_item|urlencode:''}}">
    Check It Out
</a>

und in deinem views.py:

def YOUR_VIEW_DEF(request, pk):
    YOUR_OBJECT.objects.filter(pk=pk).update(views=F('views')+1)
    return HttpResponseRedirect(request.GET.get('next')))
29
furins

Die folgende Antwort könnte für den ersten Teil Ihrer Frage hilfreich sein:

Django: Wie kann ich eine Ansichtsfunktion aus einer Vorlage aufrufen?

2
Mahshid Zeinaly