Fazendo jQuery conversar com Django

934 views
Skip to first unread message

Régis Silva

unread,
Oct 6, 2015, 11:50:50 PM10/6/15
to django...@googlegroups.com, Curso de Django
Considere o seguinte js:

Ele pega um #novoValor e atribui ao input #id_price

  $("#btnAtualizarValor").click(function(){
      $("#id_price").val($("#novoValor").val());
  });

Como eu faço para que este valor (uma variável) seja lido na view do Django para que eu possa manipular este valor pelo Django?

# views.py

def atualizar(request,novoValor):
    if self.request.GET.get(novoValor):
        return novoValor

Como eu faço isso na view?

O que fiz ai foi só uma tentativa.

Melhorando mais a explicação: eu peguei este valor através de um modal no template, e eu sei que ele ficou gravado em #novoValor, mas agora eu preciso dele na minha view do Django.

Regis da Silva
Web Developer 

Aboutme Linkedin github

Lario dos Santos Diniz

unread,
Oct 6, 2015, 11:57:13 PM10/6/15
to django...@googlegroups.com
como é esse input no seu template?

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--

Lário dos Santos Diniz






Régis Silva

unread,
Oct 7, 2015, 6:48:08 AM10/7/15
to Django Brasil
Ah um input normal.

Bruno Barbosa

unread,
Oct 7, 2015, 8:26:44 AM10/7/15
to django...@googlegroups.com, Curso de Django
Você vai precisar passar esse valor via Ajax pra uma view

--
Bruno Barbosa
Web Developer

--

Régis Silva

unread,
Oct 7, 2015, 8:42:58 AM10/7/15
to django...@googlegroups.com, Curso de Django
Beleza, e como faz isso?
Julio, não sei fazer com sua resposta também.

Regis da Silva
Web Developer 

Aboutme Linkedin github


Você recebeu essa mensagem porque está inscrito em um tópico no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/django-brasil/kAN_A-aW23Y/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para django-brasi...@googlegroups.com.

Rafael dos Santos Gonçalves

unread,
Oct 7, 2015, 8:49:44 AM10/7/15
to django...@googlegroups.com, Curso de Django
Rafael dos Santos Gonçalves
Ramal - 6757

Fred Chevitarese

unread,
Oct 7, 2015, 9:38:16 AM10/7/15
to django...@googlegroups.com
Uma googlada rápida...

Você precisa de uma view no django apta à receber os dados, e passar os dados via ajax... 
Neste link aí tá explicadão! ;) 


https://realpython.com/blog/python/django-and-ajax-form-submissions/

Abraço!



"
São os homens que mais me surpreendem na humanidade. Porque perdem a saúde para juntar dinheiro, depois perdem dinheiro para recuperar a saúde. E por pensarem ansiosamente no futuro, esquecem do presente de tal forma que acabam por não viver nem o presente nem o futuro. E vivem como se nunca fossem morrer e morrem como se nunca tivessem vivido” - Dalai Lama.
"

Fred Chevitarese - GNU/Linux


Sinval Júnior

unread,
Oct 7, 2015, 10:01:52 AM10/7/15
to django...@googlegroups.com
Seu código tá incompleto. Pesquise no Google assim Ajax Jquery. Ou seja bastará aprender a fazer um post, ou get via Jquery do lado do Django está tudo certo. Adianto que será necessário enviar o csrfmiddlewaretoken.

Ao encaminhar esta mensagem, por favor:
1 - Apague meu endereço eletrônico;
2 - Encaminhe como Cópia Oculta (Cco ou BCc) aos seus destinatários. Dificulte assim a disseminação de vírus, spams e banners.

#=================================================================+
#!/usr/bin/env python
nome = 'Sinval Júnior'
email = 'sinvalju arroba gmail ponto com'
print nome
print email
#==================================================================+

Em 7 de outubro de 2015 00:50, Régis Silva <regis.sa...@gmail.com> escreveu:

--

Lario dos Santos Diniz

unread,
Oct 7, 2015, 12:47:00 PM10/7/15
to django...@googlegroups.com
uma simples view que pega a informação enviada via POST ao servidor

from django.views.generic import TemplateView

class QualquerView(TemplateView):
    template_name = "TEMPLATEQUALQUER.html"

    def post(self, request, *args, **kwargs):
        novovalor = request.POST['novoValor']
        #faça o que quiser a partir daqui

TEMPLATEQUALQUER.html

<form class="form-signin" action="" method="POST">
            {% csrf_token %}
            <input type="text" class="form-control"  name="novoValor">
</form>

Lembrando que a documentação Django diz:
" Whenever you create a form that alters data server-side, use method="post". This tip isn’t specific to Django; it’s just good Web development practice."

Régis Silva

unread,
Oct 7, 2015, 8:53:40 PM10/7/15
to django...@googlegroups.com, Curso de Django, Julio Cesar Eiras Melanda
Eu acho que agora o problema é outro, bom não estou usando jQuery, não consegui.
Segui o exemplo do Lário, mas veja só o erro:

AttributeError at /proposal/2/
'str' object has no attribute 'get'
Request Method: POST
Django Version: 1.8.2
Exception Type: AttributeError
Exception Value:
'str' object has no attribute 'get'

# views.py
class ProposalDetail(DetailView):
    template_name = 'core/proposal/proposal_detail.html'
    model = Proposal

    def post(self, request, *args, **kwargs):
        novoValor = request.POST['novoValor']
        return novoValor

# template: proposal_detail.html
    <form class="navbar-form navbar-right" action="{% url 'create_contract_url' %}" method="get">
        <!-- edit -->
        <a id="edit_proposal" href="{% url 'proposal_edit' pk=proposal.id %}">
            <button type="button" class="btn btn-success">
                <span class="fa fa-pencil"></span> Editar
            </button>
        </a>
    <input name="new_contract" type="submit" class="btn btn-primary" value="{{ proposal.id }}" />
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal">
 Atualizar valores
</button>

</form>

<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title" id="myModalLabel">Atualizar valores</h4>
      </div>
      <div class="modal-body">
        <form action="" method="POST">
          {% csrf_token %}
          <input id="novoValor" name="novoValor" type="text" placeholder="Digite o valor">
        </form>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Fechar</button>
        <button id="btnAtualizarValor" type="button" class="btn btn-primary" data-dismiss="modal">Atualizar</button>
      </div>
    </div>
  </div>
</div>

Pergunta: Será que o submit da linha acima (que é usada para GET) está interferindo no POST?
Porque o erro dá quando eu pressiono ENTER, e quando eu clico no botão atualizar ele não funciona, ou pelo menos não consegui implementar.

Regis da Silva
Web Developer 

Aboutme Linkedin github


--
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/django-brasil/kAN_A-aW23Y/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para django-brasi...@googlegroups.com.

Lario dos Santos Diniz

unread,
Oct 8, 2015, 9:32:59 AM10/8/15
to django...@googlegroups.com
Amigo, no seu template não existe um "botão" que chame o método POST.
Você teria que fazer:


<form action="" method="POST">
    {% csrf_token %}
    <input id="novoValor" name="novoValor" type="text" placeholder="Digite o valor">
 <input type="submit">
</form>

Ou usar o ajax para fazer isso (que era a sua ideia inicial, mas agora sabendo como pegar a informação na view).


Andre Duarte

unread,
Oct 13, 2015, 11:08:51 AM10/13/15
to Django Brasil, curso-d...@googlegroups.com
Primeiro melhore a sua view "atualizar" para retornar um Json com erro em caso de falha.

tente chamar a view diretamente para ver se tem alguma zica. segue um exemplo do Js.

$("#btnAtualizarValor").click(function(){
      $("#id_price").val($("#novoValor").val());
      $.get('minhaUrlParaAtualizar/'+ $("#novoValor").val() + '/', function(resultado){
         if (resultado) {
            console.log('tudo ok');
         } else {
            console.log('Falhou a chamada Ajax :( ');
         }
      })
  });
Reply all
Reply to author
Forward
0 new messages