У меня был html-комментарий в шаблоне Django, и он вызывал ошибку сервера, когда DEBUG = False, почему? - PullRequest
1 голос
/ 04 октября 2019

Ранее у меня был файл favicon.png, я удалил файл favicon.png. Это не создавало никаких проблем, пока я не переключился с DEBUG = True на DEBUG = False в моем файле settings.py. И я получил ошибку сервера 500.

Для диагностики проблемы я добавил DEBUG_PROPAGATE_EXCEPTIONS = True в мои settings.py И я получил следующую ошибку: повышение ValueError ("Отсутствует запись манифеста статических файлов для"% s ""%clean_name) ValueError: Отсутствует запись манифеста staticfiles для 'favicon.png'

Единственное место, где было даже упоминание о 'favicon.png', было в виде html-комментария в моем html-файле логина, в файле login.htmlв голове следующее:

  <title>Login</title>
 <!-- <link rel="shortcut icon" type="image/png" href="{% static 'favicon.png' %}"/> -->

, когда я удалил html-комментарий favicon.png, чтобы код стал:

<title>Login</title>

У меня больше не было 500 ошибок сервера, и все снова заработало,

Как html-комментарий может вызвать ошибку в моем коде? Я думал, что html-комментарий не может вызвать ошибку.

1 Ответ

1 голос
/ 04 октября 2019

Строка:

<!-- <link rel="shortcut icon" type="image/png" href="{% static 'favicon.png' %}"/> -->

будет закомментирована при визуализации страницы, но при создании html-шаблона Django все равно попытается выполнить {% static 'favicon.png' %}, поскольку языков шаблонов нене понимает html , который включает, но не ограничивается, html комментариями.

Языки шаблонов должны решить, какие специальные символы он будет использовать, и он не может использовать специальныеhtml-символы, потому что он не сможет различить, что такое html-код и что такое код шаблона.

Так что в случае django, <! не является «специальным символом» на языке шаблонов, поэтому он игнорируется, в то время как {% является "специальным символом" , поэтому код в этом блоке будет выполнен.

Если вы хотите оставить комментарийдля этого вы можете выполнить одно из следующих действий:

{% comment %}
<link rel="shortcut icon" type="image/png" href="{% static 'favicon.png' %}"/>
{% endcomment %}

{% # <link rel="shortcut icon" type="image/png" href="{% static 'favicon.png' %}"/> %}

Редактировать

Вот фрагмент из документов , связанный с вашей проблемой:

В дополнение к этим шагам настройки вы такженужно на самом деле обслуживать статические файлы.

Во время разработки, если вы используете django.contrib.staticfiles, это будет выполнено автоматически runserver, когда для DEBUG установлено значение True (см. django.contrib.staticfiles.views.serve. ()).

Этот метод крайне неэффективен и, вероятно, небезопасен, поэтому он непригоден для производства.

См. Развертывание статических файлов для правильной стратегии обслуживания статических файлов в производственных средах

Это заставляет меня подозревать, что ваш settings.py неправильно настроен для развертывания.

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