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?
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!