Как провериться на админа в шаблоне Django?
Давайте по порядку.
1. Шаблонизатор джанго. Принимает на вход html (на самом деле не тольк, а любой текстовый файл) и коробку с новогодними подарками (нет) переменными, так называемый контекст. При обработке шаблона шаблонизатор заменяет специальный синтаксис {{ имя_переменной }} которые он ищет в контекстте (контекст это обычный словарь ключ-значение).
2. User. Юзер это встроенная в джанго модель юзера. Ее можно заменить своей, но 90% используется эта. Middleware авторизации получает объект запроса, перед тем как он будет передан на обработку во View. В 90% случаев опять же используется встроенная миддлварь из модуля django.contrib.auth. Миддлварь ковыряется в куках, находит session_key и ищет в базе данных (в 90% случаев, ну вы понели) какому юзеру соответствует эта сессия. После этого добавляется/модифицируется property экземпляра HttpRequest. Этому аттрибуту присваивается выковырянный из БД экземпляр User или, если юзер не авторизован, AnonymousUser.
3. View вызывает функцию render которая принимает шаблон и контекст. для сбора контекста у класса View есть метод get_context который собирает контекст в кучу. Даже если вы просто написали самый банальный class MyFuckingView(TemplateView):
    template_name = 'some/module/template.html'
то при обработке get запроса будет вызван get_context из родительского класса TemplateView.
4. По умолчанию джанга пропихивает в контекст request и еще некоторые вещи ( экземпляр view, который был использован и в зависимости от использованного CBV (class based view) там может быть queryset, object и другие штуки. Еще раз, это встроенный функционал, поэтому если вы модифицируете контекст, то вам всегда нужно вызывать метод родителя, чтобы это не потерялось:class MyFuckingView(TemplateView):
    template_name = 'some/module/template.html'

    def get_context(self):
        ctx = super().get_context()
        ctx['model_name'] = 'Sasha Grey'
        ctx['category'] = 'Milf anal'
        return ctx
5. Наконец резюмируя, в вашем случае в контексте должен быть request. is_admin там могло появиться только принудительно. Модифицируйте шаблон:{% if request.user.is_admin %}
    <a href="#" class="edit-button">Edit</a>
{% endif %}
и все должно заработать. И перечитайте то что я писал выше - туториал по джанго можно осилить за день-два, это очень с одной стороны простой и с другой продуманный и вымученный за 13 лет существования всем сообществом фреймворк.
{% if user.is_superuser %}
    # Hello, admin.
{% endif %}
Если объяснить, то user это request.user контекстная переменная которая создается автоматически.
Источник: https://stackoverflow.com/questions/11916297/djang...