Skip to main content

Django Node Modules

PyPI version License: MIT Python Version Django Version

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

⚙️ Настройка

  1. Добавьте приложение в INSTALLED_APPS:
# settings.py
INSTALLED_APPS = [
    # ...
    'django_node_modules.apps.DjangoNodeModulesConfig',
    # ...
]
  1. Настройте базовые параметры:
# 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
  1. Подключите 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

🤝 Вклад в разработку

Мы приветствуем вклад в развитие проекта!

  1. Форкните репозиторий
  2. Создайте ветку для фичи (git checkout -b feature/amazing-feature)
  3. Зафиксируйте изменения (git commit -m 'Add amazing feature')
  4. Запушьте в ветку (git push origin feature/amazing-feature)
  5. Откройте Pull Request

Отчет об ошибках

Используйте трекер задач GitHub для сообщения об ошибках.

📄 Лицензия

Распространяется под лицензией MIT. См. файл LICENSE для подробностей.

👨‍💻 Автор

Маг Ильяс DOMA (MagIlyasDOMA)

🔗 Ссылки

Metadata

Release files for django-node-modules 1.0.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-node-modules 1.0.6
File Size Uploaded
django_node_modules-1.0.6.tar.gz 16.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-node-modules 1.0.6
File Interpreter ABI Platform
django_node_modules-1.0.6-py3-none-any.whl Python 3 none any Details

Total release size: 34.1 kB

Release files / django_node_modules-1.0.6.tar.gz

Download URL django_node_modules-1.0.6.tar.gz
Size 16.7 kB
Tags Source
SHA-256 checksum
How to use checksums
8ecc840ce78c97ba38d7408b3d3b8fb6dd0000d84cbbf8ca46fbe69d55ad5220
BLAKE2b-256 checksum
How to use checksums
b8fd2a7a67ecd20205b4660b49be6c3b3a3397bff79a80b48ca1e1663fa76f65
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.0

Release files / django_node_modules-1.0.6-py3-none-any.whl

Download URL django_node_modules-1.0.6-py3-none-any.whl
Size 17.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
40ac9963a306d61488239ea69f4d28bfd3e16a0a2a7030f3d5f8a8f6dd42c708
BLAKE2b-256 checksum
How to use checksums
4bd896080934d6cf406726622a6562f97f1f89ef582c6e94a36f783c5e7f7ea4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.0

Release history Release notifications | RSS feed

This release

1.0.6 This release

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page