A Django application for easily managing and serving files from local node_modules and remote NPM packages directly from Django templates
Project description
Django Node Modules
Django Node Modules — это Django-приложение для удобного управления и обслуживания файлов из локальных node_modules и удаленных NPM-пакетов прямо из Django-шаблонов.
🚀 Особенности
- Локальные node_modules: Автоматическое создание ссылок на файлы из локальных
node_modules - CDN-поддержка: Подключение файлов напрямую из npm через jsDelivr CDN
- Безопасность: Контроль доступа к пакетам через
ALLOWED_NODE_MODULES - Поддержка типов файлов: JavaScript (модули и обычные), CSS
- Гибкая настройка: Рекурсивный поиск, кастомные пути, дополнительные атрибуты
- Специальная поддержка hrenpack пакетов: Упрощенное подключение hrenpack_js и hrenpack-theme-style
- Кеширование конфигураций: Оптимизация загрузки конфигов популярных пакетов
📦 Установка
pip install django-node-modules
Зависимости
- Django 5.2.9
- django-static-engine>=0.1.7, <0.2.0
- filetype>=1.2.0
- requests
⚙️ Настройка
- Добавьте приложение в INSTALLED_APPS:
# settings.py
INSTALLED_APPS = [
# ...
'django_node_modules.apps.DjangoNodeModulesConfig',
# ...
]
- Настройте базовые параметры:
# settings.py
import pathlib
# Обязательная настройка: путь к node_modules
NODE_MODULES_DIR = BASE_DIR / 'node_modules'
# Опционально: список разрешенных пакетов
ALLOWED_NODE_MODULES = ['bootstrap', 'jquery'] # или '__all__' для всех
# Опционально: кеширование конфига hrenpack-theme-style (по умолчанию True)
CACHE_HRENPACK_THEME_STYLE_CONFIG = True
- Подключите URL:
# urls.py
from django.urls import path, include
urlpatterns = [
# ...
path('node_modules/', include('django_node_modules.urls')),
# ...
]
📖 Использование
Шаблонные теги
Загрузите теги в шаблон:
<!-- Для стандартных пакетов -->
{% load node_modules %}
<!-- Для hrenpack пакетов -->
{% load node_hrenpack %}
Локальные пакеты
JavaScript файлы
{% local_node_js_package "bootstrap" %}
<!-- Или конкретный файл -->
{% local_node_js_package "bootstrap" path="dist/js/bootstrap.min.js" %}
<!-- Как ES-модуль -->
{% local_node_js_package "some-module" path="index.js" module=True %}
<!-- Рекурсивный поиск всех JS файлов -->
{% local_node_js_package "my-package" recursive=True %}
CSS файлы
{% local_node_css_package "bootstrap" %}
<!-- Или конкретный файл -->
{% local_node_css_package "bootstrap" path="dist/css/bootstrap.min.css" %}
Удаленные пакеты из npm CDN
{% npm_node_package "vue" version="3.4.0" path="dist/vue.global.js" %}
{% npm_node_package "react" path="umd/react.production.min.js" crossorigin="anonymous" %}
<!-- С дополнительными атрибутами -->
{% npm_node_package "jquery" integrity="sha256..." crossorigin="anonymous" defer=True %}
🔧 Специальная поддержка hrenpack пакетов
hrenpack_js
hrenpack_js — это пакет с набором полезных JavaScript утилит и компонентов.
Подключение CSS
{% hrenpack_js_css %}
<!-- С указанием версии -->
{% hrenpack_js_css version="1.2.0" %}
Подключение JavaScript
<!-- Все скрипты -->
{% hrenpack_js_scripts "all" %}
<!-- Или -->
{% hrenpack_js_scripts %}
<!-- Только указанные скрипты -->
{% hrenpack_js_scripts "include" "utils.js" "components.js" %}
<!-- Все, кроме указанных -->
{% hrenpack_js_scripts "exclude" "deprecated.js" %}
<!-- С указанием версии -->
{% hrenpack_js_scripts "all" version="1.2.0" %}
hrenpack-theme-style
hrenpack-theme-style — это пакет с темами и стилями для интерфейсов.
Подключение CSS
{% hrenpack_theme_style_css %}
Подключение JavaScript
<!-- Базовая конфигурация (только основной скрипт) -->
{% hrenpack_theme_style_css "base" %}
<!-- Поддержка темной темы -->
{% hrenpack_theme_style_css "dark_theme" %}
<!-- Стили для форм -->
{% hrenpack_theme_style_css "form" %}
<!-- Полная конфигурация (все стили) -->
{% hrenpack_theme_style_css "full" %}
<!-- Или -->
{% hrenpack_theme_style_css %}
Примечание: JavaScript темы по умолчанию включают необходимые зависимости из hrenpack_js, если не указан параметр no_deps=True.
Автоматическое определение источника
Пакет автоматически определяет, использовать ли локальную версию или CDN:
- Если пакет существует локально в node_modules и не указана версия → используется локальная версия
- В противном случае → используется CDN версия
🔧 Конфигурация
Настройки приложения
| Настройка | Тип | По умолчанию | Описание |
|---|---|---|---|
NODE_MODULES_DIR |
pathlib.Path |
Обязательно | Путь к директории node_modules |
ALLOWED_NODE_MODULES |
list или str |
'__all__' |
Список разрешенных пакетов или __all__ |
CACHE_HRENPACK_THEME_STYLE_CONFIG |
bool |
True |
Кешировать ли конфиг hrenpack-theme-style |
Безопасность
По умолчанию доступны все пакеты. Для ограничения доступа:
ALLOWED_NODE_MODULES = [
'bootstrap',
'jquery',
'font-awesome',
'hrenpack_js',
'hrenpack-theme-style',
# только эти пакеты будут доступны
]
🎯 Примеры
Полный пример шаблона с hrenpack
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Django App with hrenpack</title>
{% load node_modules %}
{% load node_hrenpack %}
<!-- Стандартные пакеты -->
{% local_node_css_package "bootstrap" %}
<!-- hrenpack темы -->
{% hrenpack_theme_style_css "light" %}
<!-- CSS для hrenpack_js -->
{% hrenpack_js_css %}
</head>
<body class="hrenpack-light-theme">
<div id="app">
<!-- Ваш контент -->
</div>
<!-- Стандартные пакеты -->
{% local_node_js_package "jquery" %}
{% local_node_js_package "bootstrap" path="dist/js/bootstrap.bundle.min.js" %}
<!-- hrenpack JavaScript -->
{% hrenpack_theme_style_scripts "light" %}
{% hrenpack_js_scripts "include" "utils.js" "components.js" %}
<!-- Vue.js из CDN -->
{% npm_node_package "vue" version="3.4.0" path="dist/vue.global.js" defer=True %}
</body>
</html>
Пример структуры проекта
my_project/
├── node_modules/
│ ├── bootstrap/
│ │ ├── dist/
│ │ │ ├── css/
│ │ │ │ └── bootstrap.min.css
│ │ │ └── js/
│ │ │ └── bootstrap.bundle.min.js
│ │ └── package.json
│ ├── hrenpack_js/
│ │ ├── index.js
│ │ ├── utils.js
│ │ ├── components.js
│ │ ├── styles.css
│ │ └── package.json
│ └── hrenpack-theme-style/
│ ├── light/
│ │ ├── theme.css
│ │ └── theme.js
│ ├── dark/
│ │ ├── theme.css
│ │ └── theme.js
│ └── package.json
├── my_project/
│ ├── settings.py
│ └── urls.py
└── templates/
└── base.html
🔍 API Reference
Стандартные теги шаблонов
local_node_js_package
local_node_js_package(package_name: str,
path: Optional[str] = None,
recursive: bool = False,
module: bool = False)
local_node_css_package
local_node_css_package(package_name: str,
path: Optional[str] = None,
recursive: bool = False)
npm_node_package
npm_node_package(package_name: str,
version: Optional[str] = None,
path: str = '',
**kwargs)
hrenpack теги шаблонов
hrenpack_js_css
hrenpack_js_css(version: Optional[str] = None)
hrenpack_js_scripts
hrenpack_js_scripts(type: Literal['include', 'exclude', 'all'] = 'all',
*args,
version: Optional[str] = None)
hrenpack_theme_style_css
hrenpack_theme_style_css(config: str = 'full',
version: Optional[str] = None)
hrenpack_theme_style_scripts
hrenpack_theme_style_scripts(config: str = 'full',
version: Optional[str] = None,
no_deps: bool = False)
🛠 Разработка
Структура проекта
django_node_modules/
├── templates/
│ └── django_node_modules/
│ ├── local_node_packages.html
│ ├── npm_node_packages.html
│ └── hrenpack/
│ ├── css.html
│ ├── hrenpack-theme-style.html
│ └── hrenpack_js.html
├── templatetags/
│ ├── __init__.py
│ ├── node_modules.py # Стандартные теги
│ └── node_hrenpack.py # hrenpack теги
├── __init__.py
├── apps.py
├── constants.py
├── urls.py
├── utils/ # Утилиты
│ ├── __init__.py
│ ├── base.py
│ ├── hrenpack_base.py
│ ├── hrenpack_js.py
│ └── hrenpack_theme_style.py
└── views.py
🤝 Вклад в разработку
Мы приветствуем вклад в развитие проекта!
- Форкните репозиторий
- Создайте ветку для фичи (git checkout -b feature/amazing-feature)
- Зафиксируйте изменения (git commit -m 'Add amazing feature')
- Запушьте в ветку (git push origin feature/amazing-feature)
- Откройте Pull Request
Отчет об ошибках
Используйте трекер задач GitHub для сообщения об ошибках.
📄 Лицензия
Распространяется под лицензией MIT. См. файл LICENSE для подробностей.
👨💻 Автор
Маг Ильяс DOMA (MagIlyasDOMA)
- Email: magilyas.doma.09@list.ru
- GitHub: @magilyasdoma
🔗 Ссылки
- PyPI: https://pypi.org/project/django-node-modules/
- Документация: https://github.com/magilyasdoma/django-node-modules/blob/main/README.md
- Исходный код: https://github.com/magilyasdoma/django-node-modules
- Трекер задач: https://github.com/magilyasdoma/django-node-modules/issues
- hrenpack-theme-style конфиг: https://raw.githubusercontent.com/magilyasdoma/hrenpack-theme-style/main/config-api.json
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_node_modules-1.0.6.tar.gz.
File metadata
- Download URL: django_node_modules-1.0.6.tar.gz
- Upload date:
- Size: 16.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ecc840ce78c97ba38d7408b3d3b8fb6dd0000d84cbbf8ca46fbe69d55ad5220
|
|
| MD5 |
6c7cda71d8e117d3398db528143da716
|
|
| BLAKE2b-256 |
b8fd2a7a67ecd20205b4660b49be6c3b3a3397bff79a80b48ca1e1663fa76f65
|
File details
Details for the file django_node_modules-1.0.6-py3-none-any.whl.
File metadata
- Download URL: django_node_modules-1.0.6-py3-none-any.whl
- Upload date:
- Size: 17.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40ac9963a306d61488239ea69f4d28bfd3e16a0a2a7030f3d5f8a8f6dd42c708
|
|
| MD5 |
0d5473b2df03a8e2b2bdf60d77f53ad1
|
|
| BLAKE2b-256 |
4bd896080934d6cf406726622a6562f97f1f89ef582c6e94a36f783c5e7f7ea4
|