Django render_to_字符串不呈现javascript
我正在从事一个Django项目,在该项目中,我使用render_to_string从后端预呈现HTML模板,然后将它们作为对ajax调用的响应发送到前端Django render_to_字符串不呈现javascript,javascript,html,django,Javascript,Html,Django,我正在从事一个Django项目,在该项目中,我使用render_to_string从后端预呈现HTML模板,然后将它们作为对ajax调用的响应发送到前端 rendered_html.append( [render_to_string("webapp/popup.html", context=shop_context), location['Logo'], location['LONG'], location['
rendered_html.append(
[render_to_string("webapp/popup.html", context=shop_context), location['Logo'], location['LONG'],
location['LAT'], location['id']])
return JsonResponse({"rendered_html": rendered_html})
我用javascript将这个呈现的html附加到前端。HTML代码和Django上下文变量工作正常,但文件中的javascript根本不工作。
如果我从开发人员的控制台看到elements部分,我可以看到包含javascript,但它不起作用,即使是一个小的console.log也不起作用
这有解决办法吗?还是我做错了什么?任何帮助都将不胜感激。面临同样的问题。
为了解决所描述的问题,我将js代码放在一个单独的js文件中,在html中,我在脚本标记中指明了它的路径。
然后,当我得到(视图中的render_to_string)返回的代码行时,我使用正则表达式搜索脚本标记,并加载它们在src中编写的文件
模板
1路:
查看
如果你还有其他问题,我很乐意回答。
我还想看看您是否找到了解决此问题的其他方法。这是否回答了您的问题@阿卜杜勒·阿齐兹巴卡特:不,不是。这是一个在现有Js中导入Js的解决方案。我需要在后端预呈现html文件,javascript不会呈现。你说:“我可以看到javascript包含在内,但它不工作”,这当然意味着javascript被呈现了。这个问题有很多与您的用例类似的答案。此外,您的问题是不可再现的。您没有提供足够的信息来再现您的问题,请参阅如何编写一份报告。
$.ajax({
type: "GET",
url: '/get_html/',
data: {
},
success: function(data) {
const content = document.querySelector('.main__content.inner');
content.innerHTML = data['html'];
const scripts = data['html'].match(/<script (.*?)<\/script>/g)
scripts.map((script) => {
script = script.replace('"><\/script>', '').replace('<script src="/', '');
console.log(script)
loadJS(script);
})
},
});
function loadJS(file) {
const content = document.querySelector('.main__content.inner');
const jsElm = document.createElement("script");
jsElm.src = file;
content.appendChild(jsElm);
}
$.ajax({
type: "GET",
url: '/get_html/',
data: {
},
success: function(data) {
$(".main__content.inner").html(data['html']);
},
failure: function(data) {
console.log('Get html error');
}
});
class GetHtmlView(View):
def get(self, request):
if request.is_ajax():
html = render_to_string('your html path')
return JsonResponse({'html': html})