2013-07-11 14 views
21

Ich habe eine Frage, wie man eine Ansicht Funktion von einer Vorlage HTML-Taste aufrufen? Wie eine Onclick-Funktion? Hier ist die Vorlage:Django: Wie kann ich eine Ansichtsfunktion aus einer Vorlage aufrufen?

<input id="submit" type="button" onclick="xxx" method="post" value="Click" /> 

Und die views.py ist:

def request_page(request): 
    ...do something... 
    return render_to_response("/directory.html", {}) 

Thank you very much.

Antwort

10

Eine Option ist, können Sie die submit-Taste mit einem form

So etwas wickeln:

<form action="{% url path.to.request_page %}" method="POST"> 
    <input id="submit" type="button" value="Click" /> 
</form> 

(entfernen Sie die onclick und method)

Wenn Sie eine bestimmte laden möchten Teil der Seite, ohne Seite neu zu laden - Sie können

<input id="submit" type="button" value="Click" data_url/> 
tun

und auf einem submit Zuhörer

$(function(){ 
    $('form').on('submit', function(e){ 
     e.preventDefault(); 
     $.ajax({ 
      url: $(this).attr('action'), 
      method: $(this).attr('method'), 
      success: function(data){ $('#target').html(data) } 
     }); 
    }); 
}); 
+0

Danke, aber ich möchte die Methode in view.py nennen, nicht nur springen die Seite .. – Robert

+3

Ja .. das ist, was der Ajax einreichen tut. Ihre Frage war unklar, also habe ich beide Antworten hinzugefügt – karthikr

+0

Ich frage mich, gibt es eine Möglichkeit für Multithreading in Django? Hier sind die Fragen: http://stackoverflow.com/questions/17601698/can-django-do-multi-thread-works – Robert

3

können Sie die Eingabe in ein Formular so: -

<script> 
    $(document).ready(function(){ 
     $(document).on('click','#send', function(){ 
      $('#hid').val(data) 
      document.forms["myForm"].submit(); 
     }) 
    }) 
</script> 

<form id="myForm" action="/request_page url/" method="post"> 
    <input type="hidden" id="hid" name="hid"/> 
</form> 
<div id="send">Send Data</div> 
54

Unter der Annahme, dass Sie einen Wert aus der Benutzereingabe in HTML Textbox erhalten möchten, wann immer Der Benutzer klickt auf die Schaltfläche "Click" und ruft eine Python-Funktion (Mypython-Funktion) auf, die Sie in mypythoncode.py geschrieben haben. Beachten Sie, dass die Klasse "btn" in einer CSS-Datei definiert ist.

innen templateHTML.html:

<form action="#" method="get"> 
<input type="text" value="8" name="mytextbox" size="1"/> 
<input type="submit" class="btn" value="Click" name="mybtn"> 
</form> 

innen view.py:

import mypythoncode 

def request_page(request): 
    if(request.GET.get('mybtn')): 
    mypythoncode.mypythonfunction(int(request.GET.get('mytextbox'))) 
return render(request,'myApp/templateHTML.html') 
+2

Dies ist eine sehr gute Antwort - überrascht keine Stimmen mehr ... Haben Sie das in Ihren eigenen Projekten verwendet? – nicorellius

+1

Ich bin froh, dass es nützlich war.Ja, ich habe ein Projekt in Github hochgeladen, wo ich es benutzt habe. https://github.com/MahshidZ/ArchivIT –

+1

Vorsicht, GET und HEAD Anfrage sollte sicher/idenpotent sein. https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html – Eloims

6

Wie wäre es damit:

<a class="btn btn-primary" href="{% url 'url-name'%}">Button-Text</a> 

Die Klasse wird mit Bootstrap-Stile für primäre Taste.

<button class="btn btn-primary" onclick="location.href={% url 'logout'%}">Logout</button> 

Wo Abmelde Endpunkt:

0

Für zB kann ein Logout-Button wie folgt geschrieben werden

#urls.py: 
url(r'^logout/$', auth_views.logout, {'next_page': '/'}, name='logout'), 
Verwandte Themen