Джанго: Проверьте, безопасно ли соединение из шаблона? - PullRequest
8 голосов
/ 05 декабря 2010

Я хочу проверить, работает ли мой сайт под HTTPS из моего шаблона, чтобы я мог условно добавлять S в HTTP моих внешних библиотек javascript (а именно, jQuery).Как я могу это сделать?

Ответы [ 4 ]

14 голосов
/ 05 декабря 2010

Если ваши ресурсы размещены на том же компьютере, с которого вы обслуживаете запросы, может вообще не потребоваться указывать схему URL:

<script src="/static/js/myfile.js" type="text/javascript"></script>

При этом будет использоваться тот же протокол (http или https) и сервер как запрос к исходной странице.

Редактировать 2 (2016):

Если вы обращаетесь к ресурсу на другом сервере, лучшее решение сейчас (как указано )out на mpen ниже ) - использовать относительную схему URL:

<script src="//media.example.com/static/js/myfile.js" type="text/javascript"></script>

Это автоматически подключится к серверу с использованием http или https в зависимости от подключения к текущей странице.

Обратите внимание, что это может вызвать некоторые проблемы , если вам требуется поддержка старых браузеров.

Редактировать: В качестве альтернативы, если вам действительно нужна информация в шаблоне по какой-то причине, вы можете добавьте обработчик контекста запроса и используйте RequestContext в ваших представлениях.Это помещает переменную request в контекст вашего шаблона, что дает вам доступ к объекту HttpRequest.Затем можно проверить, является ли запрос безопасным, проверив значение request.is_secure

Например:

<script src="http{% if request.is_secure %}s{% endif %}://media.example.com/static/js/myfile.js" type="text/javascript"></script>
7 голосов
/ 05 декабря 2012

Я не уверен, что Google сделал это в то время, когда я задал этот вопрос, но теперь они рекомендуют вам добавить библиотеку через

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

// будет использовать любую схему, которую вы используете в данный момент - никакого дополнительного кода или условий не требуется.

6 голосов
/ 05 декабря 2010

Проверьте запрос в представлении с помощью is_secure () и отправьте его в шаблон.

1 голос
/ 05 декабря 2012

Пожалуйста, рассмотрите возможность использования тега шаблона {% static %} (в Django> = 1.4), который можно настроить для размещения мультимедийных файлов в отдельном домене или сервере. Это устранит вашу проблему is_secure.

https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:templatetag-staticfiles-static

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