Ответ 1
если вы используете RequestContext
, вы можете сделать следующее:
<p>You used: {% if request.is_secure %}HTTPS{% else %}HTTP{% endif %}
См. соответствующую часть документации 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?
если вы используете RequestContext
, вы можете сделать следующее:
<p>You used: {% if request.is_secure %}HTTPS{% else %}HTTP{% endif %}
См. соответствующую часть документации Django.
Вам нужно включить соответствующий обработчик контекста запроса в файле settings.py:
TEMPLATE_CONTEXT_PROCESSORS = ('django.core.context_processors.request',)
Теперь шаблон будет иметь переменную с именем request, которая содержит текущий HttpRequest. Вы можете использовать его для поиска протокола:
{{ request.is_secure }}
С Django 1.10 вы можете использовать:
request.scheme
в представлении или в шаблоне:
{{ request.scheme }}
Из документы
Строка, представляющая схему запроса (обычно http или https).
Попробуйте использовать 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"