问题描述
我需要像contib.messages一样的中间件,但是要从视图而不是消息中向页面插入特定的JS代码。是否有现成的解决方案或任何想法如何做到这一点?
解决方法
特定于查看并与处理/数据绑定的文件
这是假设您需要特定于您的视图的JS文件,并且需要根据视图数据而有所不同。
您不需要中间件。使用上下文将脚本的url /名称从视图传递到模板,并使用模板中的变量。
# views.py
class SomeView(TemplateView):
template_name = "app/template.html"
def get_context_data(self,*args,**kwargs):
context = super().get_context_data(*args,**kwargs)
context["js_url"] = "https://some.url/file.js"
context["js_static"] = "app/local_file.js"
return context
{# templates/app/template.html #}
[...]
{% load static %}
<p>Your content</p>
<script src="{{ js_url }}"></script>
<script src="{% static js_static %}"></script>
特定于模板的文件
如果您只需要特定于模板的JS,并且不需要根据视图内部的任何处理而变化,则只需使用模板中的url /静态位置即可。
整个网站的文件
如果每个页面上都需要相同的脚本,则应该创建一个基础模板,在其中添加脚本,并使所有模板继承该基础模板。