代码之家  ›  专栏  ›  技术社区  ›  Yury Fedorov

Django提供的Vue中未呈现的模板[副本]

  •  2
  • Yury Fedorov  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我有一个用于后端的Django应用程序,它以Vue作为前端呈现模板。我在django中的视图代码包含以下部分:

    # thing/views.py
    def index(request):
        template = loader.get_template('thing/index.html')
        return HttpResponse(template.render({}, request))
    
    # thing/urls.py
    from django.views.generic import TemplateView
    
    urlpatterns = [
        path('', TemplateView.as_view(template_name='index.html')),
    ]
    
    # some other files that complete the project are not included
    

    index.html 有以下代码:

    <div id="app">
        <p v-if="quotaRemaining > -1">
            Remaining: {{ quotaRemaining }}
        </p>
    </div>
    
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                quotaRemaining: 42,
            },
        });
    </script>
    

    访问此页时呈现的唯一内容是:

    剩下的:

    而我却希望

    剩余:42

    为什么Django提供的Vue模板没有正确呈现?我该怎么做?

    1 回复  |  直到 6 年前
        1
  •  8
  •   Yury Fedorov    6 年前

    Django有自己的 template language ,它有一个概念 variables . 它对待 {{ quotaRemaining }} 作为Django变量,甚至在到达前端(到Vue)之前处理它。至少有几个解决方案。

    1. 使用环绕Vue相关代码 {% verbatim %} 标签:

      停止模板引擎呈现此块标记的内容。一个常见的用法是允许JavaScript模板层与Djangos语法冲突。

      {% verbatim %}
      <p v-if="quotaRemaining > -1">
          Remaining: {{ quotaRemaining }}
      </p>
      {% endverbatim %}
      
    2. 自定义Vue delimiters 并在客户端代码中使用这些分隔符:

      <!-- template code -->
      <p v-if="quotaRemaining > -1">
          Remaining: ${ quotaRemaining }
      </p>
      
      // js code
      const app = new Vue({
          el: '#app',
          delimiters: ['${', '}'],
          data: {
              quotaRemaining: 42,
          },
      });