Django-在模板中插入代码的中间件

问题描述

我需要像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 /静态位置即可。

整个网站的文件

如果每个页面上都需要相同的脚本,则应该创建一个基础模板,在其中添加脚本,并使所有模板继承该基础模板。