Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Dúvida no Ex. 1 da Aula 10 - Cadastro de usuários

Oi!

Fui resolver o problema e alterei somente o input text do telefone como:

        <input id="id_telefone" name="telefone" type="text"
               class="form-control" placeholder="Telefone *" value="{{form.telefone}}" >

Para minha surpresa, quando ele volta de um erro de validação, o seguinte html foi renderizado no campo do telefone:

 <input id="id_telefone" name="telefone" type="text"
               class="form-control" placeholder="Telefone *" value="<input id="id_telefone" name="telefone" type="text" value="sdf" />" >

Ou seja, é como se {{form.telefone}} estivesse colocando o campo todo - o html - e não apenas o valor.

Existe algum jeito da gente extrair somente o valor?

[]s

5 respostas

Deixa eu ver se entendi. Funciona, mas vc não quer a bizarrice que o Django coloca no input. É isso?

Nossa Flavio, - valeu pela resposta super rápida.

Vou aproveitar para elogiar o conteúdo dos seus cursos - comecei com o de Angular e agora vim aqui para python e django e seus exercicios e suas aulas mostram que vc realmente se importa com o que a gente aprende e com o nosso uso da tecnologia. Espero ter tempo para começar o MEAN assim que possível.

Então - no fundo como precisamos só colocar o valor do componente html e não reescrevê-lo completamente, não funciona - na verdade o que o django acaba quebrando o html, colocando todo o componente no valor.

<input id="id_telefone" name="telefone" type="text"
   class="form-control" placeholder="Telefone *" 
   value="<input id="id_telefone" name="telefone" type="text"               value="sdf" />" >

Outra coisa - vira e mexe (e eu sei que não é legal), precisamos fazer o output de html através de um dos parâmetros de view - tem como fazer o django renderizar isso adequadamente?

Por exemplo, quando eu faço algo como:

    return render(request,'perfil.html',{'teste':'<span>teste</span>'})

O django renderiza, no html:

&lt;span&gt;teste&lt;/span&gt;

Tem como eu mandar ele renderizar

<span>teste</span>

para aí aparecer legazão na minha página final?

solução!

Ricardo, obrigado pelo feedback. Sobre o seu problema, primeiro peço desculpas, o gabarito da solução não estava correto.

Se fizermos {{forms.nome_empresa}} o que será impresso no formulário será o HTML inteiro do input e não é isso que queremos. Queremos apenas o seu valor. Sendo assim, o correto é:

{{form.nome_empresa.value}}

Já corrigi no gabarito da questão.

Sobre a segunda parte da sua pergunta, quando você que é não é legal fazer:

  return render(request,'perfil.html',{'teste':'<span>teste</span>'})

O ideal é que seu controller disponibilize apenas dados para a view.

Ainda no seu exemplo, se quisermos fazer bem essa separação:

  return render(request,'perfil.html',{"teste":"qualquer valor"})

Temos a propriedade teste com o valor qualquer valor. Veja que agora não enviamos mais um pedaço da view, mas um dado.

Agora, lá em sua view basta usar:

<span>{{teste}}</span>

Era essa sua dúvida?

ps: sobre o treinamento de MEAN. Apesar deu ter escrito um livro sobre o assunto, não fui eu quem criou o treinamento do Alura.

Tudo certo?

Opa, era isso mesmo - Valeu!

Bom, caramba, achava que o treinamento de MEAN era teu, mas beleza - muito obrigado mesmo por se importar a beça com a gente

[]s