【发布时间】:2020-08-26 13:18:08
【问题描述】:
我需要像 contib.messages 一样的中间件,但要从视图而不是消息将特定的 JS 代码插入页面。是否有现成的解决方案或任何想法如何做到这一点?
【问题讨论】:
标签: python django django-views django-templates django-middleware
我需要像 contib.messages 一样的中间件,但要从视图而不是消息将特定的 JS 代码插入页面。是否有现成的解决方案或任何想法如何做到这一点?
【问题讨论】:
标签: python django django-views django-templates django-middleware
这是假设您需要您的 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 特定于模板而不需要根据视图内部的任何处理而变化,只需使用模板中的 urls/静态位置即可。
如果您需要在每个页面上使用相同的脚本,则应改为创建一个基本模板,在其中添加您的脚本并让您的所有模板都继承该基本模板。
【讨论】: