模板中的Django条件javascript文件导致仅在生产中丢失静态文件错误

时间:2017-10-24 17:50:35

标签: django

我在几个视图使用的模板中有一个条件,如果视图传入,它将包含一个js文件:

在模板中:

{% if js_file %}
  {% block inner_js %}
    <script defer type="text/javascript" src="{% static js_file %}"></script>
  {% endblock inner_js %}
{% endif %}

例如由视图使用:

.......
context = {'title': 'Sign up',
               'form': form,
               'js_file': 'js/supplier.js'}
    return render(request, 'pages/signup.html', context)

这在开发中没有产生错误,但是当推送到生产时我得到错误:

ValueError at /users/example/
Missing staticfiles manifest entry for ''

如果我删除了上面的模块,那么这个错误就会消失(并且适用于那些使用没有js文件的模板的视图)。 我宁愿不必为每个使用js文件的视图创建模板的新版本,他们是更好的解决方法吗? (似乎有点奇怪的错误)。

1 个答案:

答案 0 :(得分:1)

我不相信你可以有条件地包含/排除一个阻止你正在做的事情。如果您将Select TOP 1 * from openquery(X , 'SELECT * FROM fruit.apples') 标记放在if内,则只有在填充变量block时才会包含<script>标记。

如果您有条件地将此块包含在更高版本的模板中覆盖另一个名为js_file的块,您可以执行以下操作以获得相同的结果:

inner_js

{% block inner_js %} {% if js_file %} <script ...></script> {% else %} {{ block.super }} {% endif %} {% endblock inner_js %} 相当于在类中调用Python的{{ block.super }},并允许在扩展基础的模板中进行块扩展。