Внешний JS файл не отображает переменную шаблона должным образом - PullRequest
0 голосов
/ 23 января 2020

Я создал следующий сценарий JS, чтобы отобразить либо ссылку для выхода пользователя из системы, либо отправить его на страницу входа независимо от того, аутентифицированы они или нет с помощью {{user.is_authenticated}}.

. находится в моей базе. html шаблон.

база. html без использования внешних js

{% load staticfiles %}
<script src="{% static 'forum/js/main.js' %}"></script>

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>{% block title %}{% endblock title %}</title>
    <style media="screen">
      #log_block {
        display: flex;
      };

      .hide {
        display: none;
      };
    </style>
  </head>
  <body onload="startTime('clock')">
    <div id="clock">
    </div>
      <div id="log_block">
        <div id="logging">
        </div>
        <span> - <a href="{% url 'signup' %}">Register</a> - <a href="{% url 'home' %}">Home</a> - <a href="{% url 'forum-home' %}">Forums</a></span>
      </div>
    <main>
      {% block content %}{% endblock content %}
    </main>
  </body>
</html>


<script type="text/javascript">
  var hide = '{{ user.is_authenticated|yesno:"true,false"|safe }}';
  if (hide == "true") {
    document.getElementById('logging').innerHTML = "<a href=\"{% url 'logout' %}\">Logout</a>";
  }
  else if (hide == "false"){

    document.getElementById('logging').innerHTML = "<a href=\"{% url 'login' %}\">Login</a>";
  }

</script>

При проверке элементов, шаблон URL переменная правильно отображает ссылку.

<a href="/david_site/login/">Login</a>

Теперь у меня есть внешний файл JS, который я использовал для репликации того же кода, но по какой-то причине шаблон URL не работает. Ниже я опубликую созданную мной функцию c для репликации тех же результатов.

base. html

<script type="text/javascript">
  hide_log('{{ user.is_authenticated|yesno:"true,false"|safe}}', 'log_block', 'logging');
</script>

main. js

function hide_log(authorized, element){
  var hide = document.getElementById(element);
  console.log(hide);
  if (authorized == "true") {
    hide.innerHTML = "<a href=\"{% url 'logout' %}\">Logout</a>";
  }
  else if (authorized == "false"){
    hide.innerHTML = "<a href=\"{% url 'login' %}\">Login</a>";
  }
}

Привязка тега появляется, но кажется, что переменная шаблона не отображается должным образом, если я снова проверяю свою страницу шаблона, я получаю следующее ..

<a href="{% url 'logout' %}">Logout</a>

Когда скрипт находится внутри базы. html {% url 'logout' %} result: /david_site/login/,

Когда скрипт находится внутри main. js и вызывается из базы. html {% url 'logout' %} результат: {% url 'logout' %}

...