Интеграция веб-пакета в проект Django - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть довольно стандартная компоновка пакета Django для пакета с именем wptst, с источником Python в wptst/wptst/... и источниками Javascript в wptst/js/*.js:

wptst
`-- js
|   `-- wptst-source.js
|-- package.json
|-- webpack.config.js
`-- wptst
    |-- static
    |   `-- wptst
    |       |-- wptst.js
    |       |-- wptst.min.af2dc5001a126702513d.js
    |       `-- wptst.min.af2dc5001a126702513d.js.map
    `-- templates
        `-- wptst
            `-- include-script.html

Django хочет скомпилированные ресурсы в wptst/wptst/static/wptst/..

Проблема в последнем файле include-script.html. Я хочу включить его в другие шаблоны

{% include "wptst/include-script.html" %}

, поэтому мне не нужно вручную редактировать хэш-значение в сгенерированных файлах .js. Чтобы это работало, я бы хотел, чтобы оно содержало:

{% load staticfiles %}
<script src="{% static "wptst/wptst.min.af2dc5001a126702513d.js" %}"></script>

Я почти получил его для работы со следующим в webpack.config.js

entry: {
    wptst: './js/wptst-source.js'
},
target: 'web',

output: {
    path: path.resolve(__dirname, 'wptst/static/wptst'),
    filename: 'wptst.min.[contenthash].js',
    library: 'wptst',
    libraryTarget: "var"
},

plugins: [
    new HtmlWebpackPlugin({
        filename: path.resolve(__dirname, 'wptst/templates/wptst/include-scripts.html'),
        inject: false,
        template: 'wptst/templates/wptst/include-template.html'
    })
]

и следующие в include-template.html:

{% load staticfiles %}
<% for (var jsfile in htmlWebpackPlugin.files.js) { %>
<script src="{% static "wptst/<%= htmlWebpackPlugin.files.js[jsfile] %>" %}"></script>
<% } %>

но генерирует

<script src="{% static "wptst/../../static/wptst/wptst.min.af2dc5001a126702513d.js" %}"></script>

Я могу избавиться от ../../, если вывести файл в корень пакета - и затем переместить файл, но это выглядит не элегантно. Есть ли более прямой путь?

...