这是我上一个(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%。但是我该用什么呢?
如果有一种整体上更优雅的方式来做这样的事情,我也感谢任何提示!