Django Wars [Parte 29]: Rank

O Django Wars foi idealizado e desenvolvido no Django 1.4. Algumas funcionalidades aqui descritas podem não funcionar ou funcionar de forma diferente em outras versões do Django

Pra fechar toda a parte de programação de views, vamos fazer um ranking.
A essa altura do campeonato vocês já devem achar isso trivial, mas não custa nada.

Primeiro, adicionamos a entrada no urls.py

url(r'^rank/$', djangowars.views.player.rank, name='pagina_do_rank'),

Como o rank é uma lista de jogadores, a view estará dentro do aquivo de views dos players, views/players.py:

# pagina rank
def rank(request):
    if not request.user.is_authenticated():
        return redirect('pagina_de_login')
    
    #da um refrash no hp, energia e raiva do player
    jogador = request.user.get_profile()
    jogador.refresh()
    jogador.save()
    
    
    #pega a lista de 50 jogadores ordenado pelo xp
    rank = Player.objects.all().order_by("-experiencia")[:50]
    
    
    return render_to_response("rank.html", {"player": jogador,
                                              "vida": jogador.vida * 10,
                                              "rank": rank})

Por fim, só nos resta fazer um template bem bonitnho para listar os top players (rank.html).

<div class="container">
    <p>
        Informações do usuário:
        Nível {{  player.nivel }}
        |
        Energia {{  player.energia_atual }}/{{ player.energia }}
        |
        Raiva {{ player.raiva_atual }}/{{ player.raiva }}
        HP: {{ player.hp }}/{{ vida }}
        |
        Carteira {{ player.carteira }}
    </p>
    
    {% if player.raiva > 0 %}
    <!--lista de rank com possibilidade de atacar os n00bs-->
        {% for alvo in rank %}
            <p>{{ alvo.user.username }} - Level {{ alvo.nivel }} - <a href="atacar/{{ alvo.id }}">ATACAR!!!</a></p>
        {% endfor %}
    {% else %}
        {% for alvo in rank %}
            <p>{{ alvo.user.username }} - Level {{ alvo.nivel }} - <a href="atacar/{{ alvo.id }}">ATACAR!!!</a></p>
        {% endfor %}
    {% endif %}

</div> <!-- /container -->

Eitcha, esse template é o template de alvos modificado…
Mas ninguém precisa saber 😀

Senhores (e senhoras), gostaria de informá-los que esta foi a última vez que programamos Python nesse projeto.
Agora só falta a gente dar um tapa no visual pra ficar legalzinho e colocar no ar.
TA ACABANDO
AEEEEEEEEE!!!

Código fonte encontra-se em:
https://github.com/frenetic/django-wars

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *