2013-07-11 15 views
21

Mam pytanie, jak wywołać funkcję widoku z przycisku HTML szablonu? Jak funkcja onclick? Oto szablon:Django: Jak mogę wywołać funkcję widoku z szablonu?

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

A views.py jest:

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

Dziękuję bardzo.

Odpowiedz

10

Jedną z opcji jest, można owinąć przycisk submit z form

coś takiego:

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

(usuń onclick i method)

Jeśli chcesz załadować specyficzny część strony, bez przeładowywania strony - możesz wykonać

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

i na submit słuchacza

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

Dzięki, ale chcę, aby wywołać metodę w view.py, nie tylko skok strona .. – Robert

+3

Tak, to jest to, co robi ajax. twoje pytanie było niejasne, więc dodałem obie odpowiedzi – karthikr

+0

Zastanawiam się, czy istnieje sposób na wykonywanie wielowątkowych w Django? Oto pytania: http://stackoverflow.com/questions/17601698/can-django-do-multi-thread-works – Robert

3

można umieścić wejście do wnętrza postaci tak: -

<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

Zakładając, że chcesz uzyskać wartość z danych wprowadzonych przez użytkownika w formacie HTML tekstowym ilekroć użytkownik kliknie przycisk "Kliknij", a następnie wywoła funkcję Pythona (mypythonfunction), którą napisałeś w mypythoncode.py. Zauważ, że klasa "btn" jest zdefiniowana w pliku css.

wewnątrz 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> 

wewnątrz 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

To jest bardzo dobra odpowiedź - zaskoczyła nie więcej głosów ... Czy używałeś tego w swoich własnych projektach? – nicorellius

+1

Cieszę się, że było użyteczne.Tak, mam projekt przesłany na Github, gdzie go użyłem. https://github.com/MahshidZ/ArchivIT –

+1

Proszę uważać, prośba GET i HEAD powinna być bezpieczna/idenpotentna. https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html – Eloims

6

Jak o tym:

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

Klasa jest tym bootstrap stylów przycisku podstawowej.

0

Dla np, przycisk wylogowania mogą być napisane tak:

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

Gdzie wylogowania końcowy:

#urls.py: 
url(r'^logout/$', auth_views.logout, {'next_page': '/'}, name='logout'), 
Powiązane problemy