我正在尝试实现一个自定义Django标记,它将在Javascript中制定一个import语句,以使用axios中的get请求加载我的vue3应用程序及其组件模板html文件。templatetags
目录中的自定义标记如下所示:templatetags/vuecomponents.py
from django import template
from django.templatetags.static import static
register = template.Library()
@register.simple_tag
def v_load_app_component(app_name, script_name, components):
components = components.strip("[]").split(", ")
app_script = static(f"js/{script_name}.js")
comps = [static(f"components/{name}.html") for name in components]
return f"import {{{ app_name }}} from \"{app_script}?{components[0]}={comps[0]}\""
现在它只加载第一个组件,因为我只需要一个原型。唯一的问题是当我把它放到一个模板中时,如下所示:createpost.html
<script type="module">
{% v_load_app_component "creator" "internalpostform" "[internalpostform]" %}
// OUTPUTS:
// import { creator } from "static/js/internalpostform.js?internalpostform=internalpostform.html"
creator.mount("#app")
</script>
它将相关的import语句输出为:import { creator } from "static/js/internalpostform.js?internalpostform=internalpostform.html"
即使当我尝试应用safe
过滤器({% v_load_app_component "creator" "internalpostform" "[internalpostform]"|safe %}
)时,它仍然逃脱了我的自定义标记函数的输出。
我怎样才能使我的自定义标记的输出不会自动将符号转换为html实体呢?
1条答案
按热度按时间ie3xauqp1#
我在Django的文档中找到了这个过滤器。
safe
过滤器只适用于变量,例如{{ variable|safe }}
,但不适用于标签{% tag "argument"|safe %}
。要防止Django转义标记的输出,只需使用
{% autoescape off %}
这将产生所需的行为。