Removendo "auth" e "sites" do admin do Django
Você não quer que apareça na tela do admin as app auth e sites? Então vou mostrar como retirar de forma fácil e rápida.
O procedimento se resume em copiar e alterar o arquivo index.html localizado dentro do diretório de templates do admin do django (django/contrib/admin/templates/admin/) e inserir o código que impede que sejam exibidas as apps auth e sites.
Exemplo de como copiar usando um terminal Linux:
$ cd meuprojeto/templates
$ mkdir admin
$ cp /usr/lib/python2.5/site-packages/django/contrib/admin/templates/admin/index.html admin/
Abaixo está o código dentro do arquivo index.html responsável por exibir a lista de apps no admin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | {% if app_list %} {% for app in app_list %} <div class="module"> <table summary="{% blocktrans with app.name as name %}Models available in the {{ name }} application.{% endblocktrans %}"> <caption><a href="{{ app.app_url }}" class="section">{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}</a></caption> {% for model in app.models %} <tr> {% if model.perms.change %} <th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th> {% else %} <th scope="row">{{ model.name }}</th> {% endif %} {% if model.perms.add %} <td><a href="{{ model.admin_url }}add/" class="addlink">{% trans 'Add' %}</a></td> {% else %} <td> </td> {% endif %} {% if model.perms.change %} <td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td> {% else %} <td> </td> {% endif %} </tr> {% endfor %} </table> </div> {% endfor %} {% else %} <p>{% trans "You don't have permission to edit anything." %}</p> {% endif %} |
O que vamos fazer é inserir 2 "ifs" dentro da tag for de modo a não exibir as apps auth e sites. O primeiro if verifica se app_url = 'auth/' e o segundo se app_url = 'sites/'. Se app_url não for igual à nenhuma das 2 opções então a app será exibida na tela.
1 2 | {% ifnotequal app.app_url 'auth/' %} {% ifnotequal app.app_url 'sites/' %} |
Abaixo o código com os "ifs" inseridos. Lembrando que é preciso fechar as tags. Reparem na terceira e quarta linha:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | {% if app_list %} {% for app in app_list %} {% ifnotequal app.app_url 'auth/' %} {% ifnotequal app.app_url 'sites/' %} <div class="module"> <table summary="{% blocktrans with app.name as name %}Models available in the {{ name }} application.{% endblocktrans %}"> <caption><a href="{{ app.app_url }}" class="section">{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}</a></caption> {% for model in app.models %} <tr> {% if model.perms.change %} <th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th> {% else %} <th scope="row">{{ model.name }}</th> {% endif %} {% if model.perms.add %} <td><a href="{{ model.admin_url }}add/" class="addlink">{% trans 'Add' %}</a></td> {% else %} <td> </td> {% endif %} {% if model.perms.change %} <td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td> {% else %} <td> </td> {% endif %} </tr> {% endfor %} </table> </div> {% endifnotequal %} {% endifnotequal %} {% endfor %} {% else %} <p>{% trans "You don't have permission to edit anything." %}</p> {% endif %} |








Por que remover manualmente o sites e o auth do admin? Poderia simplesmente usar o admin.site.unregister().
Quando eu preciso limitar o uso do admin, normalmente é pra entregar ele pra algum cliente. Aí crio o usuário dele como “staff” e dou somente as permissões das apps que ele vai usar.
Abraço.
@Igor, eu desconhecia a possibilidade de usar o admin.site.unregister().
Obrigado!
O post serve como aprendizado,
Mas a melhor solução é não mexer no codigo.
Exemplo:
crie um usuario sem permissão de acessar essas apps.
Assim não precisa alterar uma linha de codigo.
resumindo seria assim: admin (usuario root normal) e admin2 (usuario root sem permissão de acessar os apps auth e sites.)
até mais