Boa tarde,
Gostaria de saber se é possível renderizar o conteúdo da pagina HTML com o uso de @property ao invés de acessar diretamente os atributos do objeto perfil. Se sim como?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Boa tarde,
Gostaria de saber se é possível renderizar o conteúdo da pagina HTML com o uso de @property ao invés de acessar diretamente os atributos do objeto perfil. Se sim como?
Jose, cola o código atual que você quer usar o @property. Me ajuda pois estou longe do computador. Pode ser?
Flavio,
Por exemplo, neste urls.py
from django.conf.urls import url
from perfis import views
urlpatterns = [
url(r'^$', views.index, name='home'),
url(r'^perfis/(?P<perfil_id>\d+$)', views.exibir, name='exibir'),
url(r'^perfis_todos$', views.todos, name='todos'),
]
arquivo views.py
from django.shortcuts import render
from perfis.models import Perfil
# Create your views here.
def index(request):
return render(request, 'index.html')
def todos(request):
return render(request, 'perfis.html', {'perfis': Perfil.objects.all()})
def exibir(request, perfil_id):
perfil = Perfil.objects.get(id=perfil_id)
# print 'Perfil ID Recebido {}'.format(perfil_id)
return render(request, 'perfil.html', {'perfil': perfil})
arquivo models.py
from __future__ import unicode_literals
from django.db import models
# Create your models here.
class Perfil(models.Model):
nome = models.CharField(max_length=255, null=False)
email = models.CharField(max_length=255, null=False)
telefone = models.CharField(max_length=15, null=False)
empresa = models.CharField(max_length=255, null=False)
Gostaria de saber se é possível criar um @property para acessar os "atributos" do modelo Perfil() ao invés de acessar diretamente. Por exemplo
class Perfil(models.Model):
self.__nome = models.CharField(max_length=255, null=False)
@property
def nome(self):
return self.__nome
Este atributo é utilizado na template html.
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Perfil</title>
<meta name="description" content="Pagina Perfil">
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
<!--[if lt IE 9]>
<script src = "http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="https://code.jquery.com/jquery-2.2.1.min.js"></script>
<table class="table table-striped">
<thead>
<tr>
<th>Nome</th>
<th>Email</th>
<th>Telefone</th>
<th>Empresa</th>
</tr>
</thead>
<tbody>
<tr>
<td><h2><a href="{% url 'exibir' perfil.id %}">{{perfil.nome}}</a></h2></td>
<td><h2>{{perfil.email}}</h2></td>
<td><h2>{{perfil.telefone}}</h2></td>
<td><h2>{{perfil.empresa}}</h2></td>
</tr>
</tbody>
</table>
</body>
</html>
Att,
Obrigado
Oi José!
Pode sim, mas tem um caveat ai! A property não pode ter o mesmo nome do atributo da classe ou o Django ficará doido. Nesse seu exemplo, são nomes diferentes pois a propriedade interna usa __.
Se quiser saber mais detalhes:
https://www.stavros.io/posts/how-replace-django-model-field-property/
Feliz 2017 José!
Flavio muito obrigado! Feliz 2017 pra vc tb!