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

Вы можете проверить интернет-протокол из шаблона Django?

Прямо сейчас, если я хочу проверить, доступна ли текущая страница через http:// или https://, я буду использовать следующий Javascript в своих шаблонах и написать html из document.write:

<script type="text/javascript">
var protocol = document.location.protocol;
if (protocol == "http:")
    document.write("regular");
else
    document.write("secured");
</script>

Есть ли другой способ достичь вышеуказанного в шаблоне Django без использования Javascript?

4b9b3361

Ответ 1

если вы используете RequestContext, вы можете сделать следующее:

<p>You used: {% if request.is_secure %}HTTPS{% else %}HTTP{% endif %}

См. соответствующую часть документации Django.

Ответ 2

Вам нужно включить соответствующий обработчик контекста запроса в файле settings.py:

TEMPLATE_CONTEXT_PROCESSORS = ('django.core.context_processors.request',)

Теперь шаблон будет иметь переменную с именем request, которая содержит текущий HttpRequest. Вы можете использовать его для поиска протокола:

{{ request.is_secure }}

Ответ 3

С Django 1.10 вы можете использовать:

request.scheme

в представлении или в шаблоне:

{{ request.scheme }}

Из документы

Строка, представляющая схему запроса (обычно http или https).

Ответ 4

Попробуйте использовать RequestContext и request.is_secure в вашем шаблоне.

Одно предостережение: процесс обнаружения HTTPS может отличаться от настройки сервера к следующему, поэтому вам может потребоваться небольшая работа, чтобы получить работу request.is_secure. Вы можете заставить его работать либо за счет того, что ваш прокси-сервер переднего/заднего профайла устанавливает "HTTP_X_FORWARDED_HOST" или путем написания класса промежуточного ПО, который является обычным для вашей установки.

Используйте лишенный [1] SetRemoteAddrFromForwardedFor код [2] в качестве отправной точки, если вы переходите по специальному маршруту промежуточного программного обеспечения.

(мне разрешено только 1 ссылку за сообщение, поэтому, пожалуйста, извините заблуждающиеся ссылки)

[1]: docs.djangoproject.com/en/dev/releases/1.1/#id1 "Замечания по выпуску Django 1.1 - Удалено SetRemoteAddrFromForwardedFor для промежуточного программного обеспечения"

[2]: code.djangoproject.com/browser/django/trunk/django/middleware/http.py?rev=11000#L33 "SetRemoteAddrFromForwardedFor"