【发布时间】:2021-09-23 10:44:20
【问题描述】:
我正在使用 Django 3.2
我正在将一个布尔标志传递给我的基本模板中的 Javascript 函数。但是,设置变量后,我的模板逻辑中似乎仍在使用默认值。
这是我的代码 sn-p:
/path/to/urls.py
urlpatterns = [
# ...
path('foo', TemplateView.as_view(template_name="foo.html", extra_context={'show_subscription_popup':0}), name='blog'),
path('admin/', admin.site.urls),
]
/path/to/foo.html
{% block content %}
<span>{{ show_subscription_popup}}</span>
{% endblock content %}
{% block body_js %}
<script type="text/js">
$().ready(function() {
let popDisplayed = '0';
if ({{ show_subscription_popup|default:1 }}){
popDisplayed = getCookie('popDisplayed');
}
/* remaining logic ... */
});
</script>
当我渲染页面时,我看到变量 show_subscription_popup 的正确值为 0,它被传递给 TemplateView,但是,在 javascript 中,代码如下所示:
if (1){
/* do something */
}
为什么默认值会覆盖我传递给模板的值,我该如何解决这个问题?
【问题讨论】:
-
见Rendering into JavaScript (django-antipatterns)。注意:我编写了 this 特定的反模式(并且网站本身属于另一个 SO 用户 Willem Van Onsem)