Проблемы с интеграцией Django 3 и Vue 3

#django #vue.js #webpack #vuejs3

#django #vue.js #webpack #vuejs3

Вопрос:

Я пытался интегрировать Django 3 с Vue 3 в течение двух дней, и мне частично это удалось, но не так, как хотелось бы.

Этап. Идея состоит в том, чтобы использовать Vue 3 для компонентов, которые требуют Javascript и не важны для SEO, таких как формы бронирования и т. Д …

Интеграция с помощью django-webpack-loader для внедрения пакета в шаблоны django.

 const BundleTracker = require("webpack-bundle-tracker");

module.exports = {
  publicPath: "http://0.0.0.0:8080/",
  outputDir: './dist/',

    pages: {
        main: {
            // entry for the page
      entry: 'src/main.js',
    }
    },

  chainWebpack: config => {

    config.optimization
      .splitChunks(false)

    config
      .plugin('BundleTracker')
      .use(BundleTracker, [{filename: './webpack-stats.json'}])

    config.resolve.alias
      .set('__STATIC__', 'public')

    config.devServer
      .public('http://0.0.0.0:8080')
      .host('0.0.0.0')
      .port(8080)
      .hotOnly(true)
      .watchOptions({poll: 1000})
      .https(false)
      .headers({"Access-Control-Allow-Origin": ["*"]})
  }
};

 

Это содержимое ** main.js ** это точка входа в приложение Vue3

 import { createApp, reactive, ref } from ‘vue’

const app = createApp({
el: ‘#app’,
delimiters: [’[[’, ‘]]’],
setup() {

const data = {
  returned_task: ref(''),
  temp_task: ref(''),
  modify_index: ref(-1),
  tasks: reactive([]),
}

const methods = {
  select: (index) => {
    if (data.modify_index.value === index){
      data.modify_index.value = -1;
    } else {
      data.modify_index.value = index
      data.temp_task.value = data.tasks[data.modify_index.value]
    }
  },
  deleteSelected: () => {
    data.tasks.splice(data.modify_index.value, 1);
    data.modify_index.value = -1;
  },
  updateSelected: () => {
    data.tasks.splice(data.modify_index.value, 1, data.temp_task.value);
    data.modify_index.value = -1;
  }
}

// created lifecycle event is not needed  but let's mock a delay
setTimeout(() => {
  data.tasks.splice(0, 0, ...['do this 🐱‍🐉', 'and that 🤳']);
}, 120);


return {
  ...data,
  ...methods
}

}
})

app.mount(’#app’)
 

и это в шаблоне html, где должен отображаться Vue

 <div id="app">
   [[modify_index]]
      <ul>
        <li v-for="task in tasks">[[task]]</li>
      </ul>
</div>
 

Что происходит, так это то, что внутри div # app ничего не отображается, ошибка не отображается, и я не смог найти много ссылок в Интернете.

Спасибо всем, кто может помочь мне.