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>&nbsp;</td>
            {% endif %}
 
            {% if model.perms.change %}
                <td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td>
            {% else %}
                <td>&nbsp;</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>&nbsp;</td>
            {% endif %}
 
            {% if model.perms.change %}
                <td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td>
            {% else %}
                <td>&nbsp;</td>
            {% endif %}
            </tr>
        {% endfor %}
        </table>
        </div>
      {% endifnotequal %}
    {% endifnotequal %}
  {% endfor %}
{% else %}
    <p>{% trans "You don't have permission to edit anything." %}</p>
{% endif %}
You can leave a response, or trackback from your own site.

3 Responses to “Removendo “auth” e “sites” do admin do Django”

  1. Igor Sobreira disse:

    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.

  2. admin disse:

    @Igor, eu desconhecia a possibilidade de usar o admin.site.unregister().
    Obrigado!

  3. wancharle disse:

    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

Leave a Reply

Powered by WordPress | Shop the Best Verizon Wireless Deals. | Thanks to Best CD Rates, Credit Cards and Credit card