Подтвердить что ты не робот

Django: обнаружение входа администратора в виде или шаблона

Как я могу обнаружить, из представлений или файлов шаблонов, если мой администратор подключен или нет? Например, использовать для моего сайта:

  • Пользователь открывает /admin/, введите правильные учетные данные
  • Затем пользователь откроет какую-нибудь страницу, например /page/, а также кнопки "Добавить" и "Удалить"
  • Пользователь открывает /admin/ и нажимает "Выход"
  • /page/ → нет кнопок "Добавить" и "Удалить"

Django версии 1.4

4b9b3361

Ответ 1

Ответ Джозефа подходит для вашего простого случая, но в действительности ни is_staff ни is_staff не is_superuser идеально. Предполагая, что ваша страница, скажем, /polls/ (список объектов Poll в приложении, называемом poll), вы должны протестировать определенные разрешения poll.change_poll и poll.delete_poll.

В шаблоне:

{% for poll in polls %}
    {% if perms.poll.change_poll %}<a href='/polls/edit/{{ poll.id }}'>Edit</a>{% endif %}
    {% if perms.poll.delete_poll %}<a href='/polls/delete/{{ poll.id }}'>Delete</a>{% endif %}
{% endfor %}

Или в представлении, использующем has_perm:

if not request.user.has_perm('poll.change_poll'):
    return HttpResponseForbidden('Nope!')

Или в виде с помощью декоратора:

@permission_required('poll.change_poll')
def edit_poll(request, poll_id):
    # ....

Вы можете назначить эти разрешения непосредственно пользователю, группе (а затем поместить пользователя в эту группу) или установив is_superuser.

Ответ 2

В шаблонах:

{% if user.is_superuser %}
    <p>Hello, admin.</p>
{% else %}
    <p>Hello, ordinary visitor.</p>
{% endif %}

В представлениях:

if request.user.is_superuser:
    # Hello, admin.
else:
    # Hello, ordinary visitor.

В зависимости от ваших потребностей is_staff может быть лучше, чем is_superuser. Вы можете прочитать о различии здесь.