使用ajax提取的Django模板中包含的Javascript无法得到评估?

时间:2019-03-01 15:04:35

标签: javascript jquery html ajax django

这是我上一个(Load several templates into a base template in django on buttonclick)之后的后续问题。看到那里的js-示例,我正在尝试使用Django模板进行模仿。

我有许多应用程序(app1.html,app2.html等),希望用户能够选择要加载的应用程序。它们都扩展了empty_app.html,如下所示:

<div class="window">
    <div class="window-head">
      {% block header %}
        // This is the header of the app.
      {% endblock %}
    </div>

    <div id="module-content" class="window-content">
      {% block content %}
        // This is the content of the app.
      {% endblock %}
    </div>

</div>
{% block resources %}
  //Here come app-specific javascripts
{% endblock %}

我的base.html具有4个占位符,可以放置此类应用程序:

{% load staticfiles %}

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <link rel="stylesheet" href="{% static 'some.css' %}">
  <title>Cool Apps</title>
</head>

<body>
    <div id="viewer-content">

        <div id="module-1" class="droparea-empty">

        </div>

        <div id="module-2" class="droparea-empty">

        </div>

        <div id="module-3" class="droparea-empty">

        </div>

        <div id="module-4" class="droparea-empty">

        </div>

      </div>
    <script src="{% static 'assets/js/jquery.min.js' %}">
      //Some js...
    </script>

</body>

</html>

有人告诉我要使用ajax动态获取django-templates。所以现在我有了这样的功能:

function api_get_module(url, div) {

    switch (url) {
      case 'app1':
        url = "{% url 'api_get_app1' %}"
        break;
      case 'app2':
        url = "{% url 'api_get_app2' %}"
        break;
      case 'app3':
        url = "{% url 'api_get_app3' %}"
        break;
      case 'app4':
        url = "{% url 'api_get_app4' %}"
        break;
      default:

    }

    $.ajax({
      type: 'GET',
      url: url,
      dataType: 'html',
      contentType: 'html',
      headers: {
        'api-key': my_key
      },
      success: function(result) {
        div.innerHTML = result;
      }
    });

  }

api_get_app1,2,3,4是在views.py文件中定义的,如下所示:

def api_get_app1(request):

    t = get_template('my_django_app/app1.html')
    html = t.render({})
    return HttpResponse(html)

现在,我的问题是,虽然将正确插入并呈现html,但不会评估{%block resources%}中的javascript。我认为div.innerHTML = result是99%。但是我该用什么呢? 如果有一种整体上更优雅的方式来做这样的事情,我也感谢任何提示!

0 个答案:

没有答案