Arquivos estáticos
Nessa etapa, iremos adicionar incríveis funcionalidades em nosso site usando o framework AngularJS.
Primeiramente, vamos adicionar o AngularJS em nosso projeto. Para fazer isso, siga os seguintes passos:
- Entre na pasta da sua aplicação (nesse exemplo chama-se cliente) e crie uma pasta chamada static
- Baixe o angular em fomrato .zip https://angularjs.org/
- Extraia o arquivo .zip baixado e mova o arquivo angular.js para a pasta static
- Dentro da pasta static, crie uma pasta chamada js
- Dentro da pasta js, crie três arquivos. Um chamado app.js, outro chamado catalogoDiretiva.js e o último chamado catalogoControlador.js
- Dentro do arquivo base.html, insira em cima da tag <!DOCTYPE html>, o seguinte código:
{% load staticfiles %}
Dentro da tag <head>, insira os seguintes códigos:
<script src="{% static 'angular.js' %}"></script>
<script src="{% static "js/app.js" %}"></script>
<script src="{% static "js/catalogoControlador.js" %}"></script>
<script src="{% static "js/catalogoDiretiva.js" %}"></script>
Acabamos de adicionar o AngularJS e de chamá-lo usando a linguagem de templates do django.
Criando aplicação em AngularJS
Abra o arquivo app.js e cole o código abaixo:
var app = angular.module ("catalogo",[]);
Abra o arquivo catalogoControlador.js e cole o código abaixo:
app.controller('catalogoControlador', ['$scope', function($scope, $http){
$scope.carros = [];
var isLoaded = false;
$scope.load = function(cars, infocars, atributos){ // Armazenando características dos carros.
if(isLoaded) return;
else{
for (var autom = 0 ; autom < cars.length ; autom++){
$scope.carros.push(new Object());
for (var at = 0 ; at < atributos.length ; at++){
$scope.carros[autom][atributos[at]] = String(infocars[autom][at]);
}
}
isLoaded = true;
};
console.log($scope.carros);
};
$scope.getCarros = function(){
return $scope.carros;
};
}]);
Esse código em JavaScript recebe como parâmetro uma matriz com atributos de carros salvo no banco de dados e guarda os valores em objetos JavaScript.
Exibindo carros
Vá até a pasta da sua aplicação Django e abra o arquivo views.py. Em seguida, apague tudo e cole o seguinte código:
from django.shortcuts import render
from django.http import HttpResponse
from cliente.models import Carro
# Create your views here.
def cliente(request):
data = {}
data['listagem_de_carros'] = Carro.objects.all() # adiciona todos os carros que estão no banco de dados.
data['cars'] = [str(n.Modelo) for n in data['listagem_de_carros']]
data['infocar'] = []
for carro in data['listagem_de_carros']:
data['infocar'].append([carro.id, str(carro.Modelo), str(carro.Foto), str(carro.Marca), str(carro.Modelo), str(carro.Ano), str(carro.Velocidade), str(carro.Motor), str(carro.Potencia), str(carro.Consumo), str(carro.Conforto), str(carro.Seguranca)])
data['atributos'] = ['id','detalhes','imagem','marca','modelo','ano','velocidade','motor','potencia','consumo','conforto','seguranca'];
return render(request, 'index.html', data)
Esse código lê a tabela do banco de dados e salva o resultado em uma lista do dicionário data e retorna no render.
Agora abra o arquivo index.html e adicione o código abaixo:
{% block catalogue%}
<div class="row" ng-controller = "catalogoControlador" style="margin-top: 100px; margin-left: 35px; width: 95%"> <!-- Eu sei que é feio.... -->
<span ng-bind="load({{cars}}, {{infocar}}, {{atributos}})"></span>
<span style="font-family: PT Sans">
<div class="col-sm-6 col-md-4" ng-repeat = "carro in getCarros() | filter: searchText">
<div class="thumbnail"><a id="carroDetalhe" ng-href="#{{ carro.detalhes }">
{% verbatim %}
<img ng-src="{{carro.imagem}}" class="img-responsive"/>
<div class="caption">
<h3 class="text-center"><b><span ng-bind="carro.marca + ' ' + carro.modelo + ' ' + carro.motor"></span></b> <small><span ng-bind="carro.ano"></span></small></h3>
<table class="table table-striped" style="margin-top: 30px">
<tr>
<td class="text-uppercase"><b>Velocidade</b> <small>(km/h)</small></td>
<td class="text-center">
<progress max="320" value="{{ carro.velocidade }}"></progress>
</td>
</tr>
<tr>
<td class="text-uppercase"><b>Potência</b> <small>(cv)</small></td>
<td class="text-center">
<progress max="300" value="{{ carro.potencia }}"></progress>
</td>
</tr>
<tr>
<td class="text-uppercase"><b>Consumo</b> <small>(km/l)</small></td>
<td class="text-center">
<progress max="20" value="{{ 20 - carro.consumo }}"></progress>
</td>
</tr>
<tr>
<td class="text-uppercase"><b>Conforto</b> <small>(0 a 5)</small></td>
<td class="text-center">
<progress max="5" value="{{ carro.conforto }}"></progress>
</td>
</tr>
<tr>
<td class="text-uppercase"><b>Seguraça</b> <small>(0 a 5)</small></td>
<td class="text-center">
<progress max="5" value="{{ carro.seguranca }}"></progress>
</td>
</tr>
</table>{% endverbatim %}
</div>
</div>
</a>
</div>
</span>
</div>
{% endblock %}
Obs.: Dentro de base.html, substitua a tag por
Agora, preste muita ATENÇÃO! Para o seu site exibir imagens que foram inseridas por upload, abra o arquivo url.py e insira, dentro de urlpatterns, o seguinte código:
url(r'^(?P<path>.*.jpg)/$', 'django.views.static.serve',
{'document_root': '/home/myNameUser/Project/catalogo_de_carros'}),
Troque /home/myNameUser/Project/catalogo_de_carros pelo diretório do seu projeto.