Можете ли вы проверить интернет-протокол из шаблона Джанго? - PullRequest
23 голосов
/ 03 декабря 2009

Прямо сейчас, если я хочу проверить доступ к текущей странице через 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?

Ответы [ 4 ]

45 голосов
/ 03 декабря 2009

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

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

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

23 голосов
/ 18 августа 2016

Начиная с Django 1.10, вы можете использовать:

request.scheme

в виде или в шаблоне:

{{ request.scheme }}

С Документы

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

9 голосов
/ 03 декабря 2009

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

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

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

{{ request.is_secure }}
2 голосов
/ 03 декабря 2009

Попробуйте использовать 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 Middleware»

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...