Удаление новой строки из конца файла base.html приводит к тому, что некоторые элементы исчезают из DOM - PullRequest
1 голос
/ 24 октября 2019

Это странная ошибка. У меня есть HTML-файл, который расширяет базовый шаблон с именем base.html . Я заметил, что тег script прямо перед конечным тегом body в базовом шаблоне не отображается в DOM на вкладке Элементы инструментов разработчика Chrome, и этот тег полностью обрезается вместе с остальнымиHTML-файл на вкладке Источники. Это происходит в Chrome, Mozilla и Safari, поэтому это должно быть проблемой на стороне Django. И очевидно, что наблюдаемые эффекты на странице, которые должен создать сценарий, также не происходят.

Вот конец рендеринга HTML на вкладке Sources:

  <section>
    what is going on
  </section>
<footer></footer>
<script src="/static/home/js/ba

Полностью обрезан. Вот конец этого базового шаблона:

  {% block main %}{% endblock %}

  <footer></footer>

  <script src="{% static 'home/js/base.js' %}"></script>
  {% block js %}{% endblock %}
</body>
</html>

Теперь вот где это смешно. Проблема в конце файла, поэтому я просто добавил несколько новых строк, чтобы увидеть, есть ли какая-либо разница в визуализации DOM:

  {% block main %}{% endblock %}

  <footer></footer>

  <script src="{% static 'home/js/base.js' %}"></script>
  {% block js %}{% endblock %}
</body>
</html>




И на вкладке Источники в теге позже было обрезано:

  <section>
    what is going on
  </section>
  <footer></footer>
  <script src="/static/home/js/base.j

Я не буду вставлять его сюда, но я добавил около 35 новых строк в конец файла, прежде чем я получил то, что хотел в Источниках. Кажется, что каждая новая строка обрезает визуализированный html на один символ позже.

  <section>
    what is going on
  </section>
<footer></footer>
<script src="/static/home/js/base.js"></script>
</body>
</html>

И эффекты от скрипта наконец-то сработали. Это похоже на временное решение чего-то более глубокого, что необходимо исправить. Кто-нибудь знает, что, черт возьми, происходит и где искать?

Редактировать: Вот шаблон (находится в приложении работа ), который расширяет base.html (находится в приложении home ) с именем work.html :

{% extends 'home/base.html' %}

{% block css %}
  <link rel="stylesheet" href="{% static 'work/css/work.css' %}">
{% endblock %}

{% block main %}
  <section>
    hello
  </section>
{% endblock %}

И вот представление, которое его отображает:

from django.shortcuts import render

def work(request):
    return render(request, 'work/work.html', {})

Редактировать 2: еще несколько неожиданных результатов:

Когда я удалил скрипт (чтобы я мог вставить его в голову, как это предлагается в комментариях),конец рендеринга html был таким:

<section> what is going on </section> 

И вставка прямо перед тегом </head> привела к:

<section> what is going on </section> 
< 

Тот же результат, что и выше, когда я закомментировал это в голове.

Комментирование скрипта, когда он до </body> приводит к следующему:

<section> what is going on </section> 
<footer></footer> 
<!-- <script src="/static/home/js/base.j 

И замена одинарных кавычек на двойные кавычки привела к тому, что в рендеринге html вместо одинарных кавычек отображаются двойные,единственная разница. : /

Затем я удалил почти все так, чтобы мой код был таким:

<!DOCTYPE html>
<html lang="en-US">
<head>
</head>

И это вывело:

<!DOCTYPE html>

<html lang="en-US">
<head>
<scrip

Я добавил несколько тегов:

<!DOCTYPE html>
<html lang="en-US">
<head>

</head>
<body>

</body>
</html>

И результат:

<!DOCTYPE html>

<html lang="en-US">
<head>
<script src="http://127.0.0.1:357

По какой-то причине тег сценария, сгенерированный django-livereload-server, остается. Вот как выглядит полный тег script: <script src="http://127.0.0.1:35729/livereload.js"></script></head>

1 Ответ

0 голосов
/ 24 октября 2019

Тайна над всеми. Проблема в том, что вы не должны pip install django-livereload-server. Я не знаю, что он делает за кулисами, но некоторые из моих html исчезают из-за какого-то странного алгоритма.

Итак, чтобы удалить django-livereload-server, удалите 'livereload', с вашего INSTALLED_APPS, удалите 'livereload.middleware.LiveReloadScript', с вашего MIDDLEWARE, нажмите Control-C, чтобы выйти из этого процесса терминала livereload, Control-C в окне запуска процесса runserver, чтобы применить изменения (потому что livereload защелкивается на сервер запуска, как пиявка, поэтому вам нужно перезапустить), и наслаждайтесь ожидаемым выводом. И pip uninstall django-livereload-server. Если у кого-нибудь есть какие-либо предложения для работающего приложения типа livereload (когда браузер перезагружает страницу, когда вы вводите что-то новое в html / js / css), дайте мне знать. На данный момент, я думаю, он вернулся к старой набранной вручную Command-R.

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