Skip to main content

A Django static site generator

Project description

Django StaticEngine - Документация

Обзор

Django StaticEngine — это Django-приложение для обслуживания статических файлов и директорий с поддержкой шаблонов Django. Оно позволяет превратить любую папку с HTML-файлами в полнофункциональный статический сайт с обработкой Django-шаблонов.

Установка

pip install django-static-engine

Быстрый старт

1. Добавьте 'staticsite' в INSTALLED_APPS:

INSTALLED_APPS = [
    ...,
    'staticsite.apps.StaticSiteConfig',
]

2. Настройте базовую директорию в settings.py:

STATICSITE_DIR = BASE_DIR / 'src'  # или любой другой путь

3. Добавьте URL-конфигурацию в ваш urls.py:

from django.conf import settings
from django.urls import path, include
from staticsite.views import view_constructor

urlpatterns = [
    # ... другие URL ...
    path('site/', include('staticsite.urls')),
]

# Или создайте собственное представление
urlpatterns = [
    path('src/<path:path>', view_constructor('src'), name='src')
]

4. Создайте структуру файлов:

src/
├── static_content/
│   ├── index.html
│   ├── about.html
│   ├── styles.css
│   └── images/
│       └── logo.png

Конфигурация

from pathlib import Path

# settings.py
# Обязательная настройка
BASE_DIR = Path(__file__).parent.parent

# Включить шаблон для отображения директорий
STATICSITE_USE_DIR_TEMPLATE = True  # По умолчанию: False

# Путь к директории с исходными файлами (если отличается от BASE_DIR/src)
STATIC_SITE_DIR = BASE_DIR / 'my_static_files'

Использование

Базовая структура URL

После установки приложение обслуживает файлы по следующим URL:

  • http://localhost:8000/site/ - корневая директория
  • http://localhost:8000/site/path/to/file.html - конкретный файл
  • http://localhost:8000/site/directory/ - директория (если включен шаблон)

Поддерживаемые типы файлов

Приложение автоматически определяет MIME-типы для:

  • HTML файлы (.html, .htm) - обрабатываются как Django-шаблоны
  • JSON файлы (.json) - возвращаются как JSON-ответы
  • CSS/JavaScript (.css, .js) - обслуживаются как статические файлы
  • Изображения (.png, .jpg, .gif, etc.)
  • PDF документы (.pdf)
  • Текстовые файлы (.txt, .xml)
  • Другие бинарные файлы - обслуживаются с соответствующими MIME-типами

Особенности работы

HTML-файлы как шаблоны

HTML-файлы обрабатываются движком шаблонов Django, что позволяет использовать:

  • Теги шаблонов ({% tag %})
  • Переменные ({{ variable }})
  • Наследование шаблонов
  • Встроенные фильтры

Пример index.html:

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}Мой сайт{% endblock %}</title>
</head>
<body>
    <h1>Добро пожаловать</h1>
    <p>Текущее время: {{ now|date:"H:i" }}</p>
</body>
</html>

JSON-файлы

JSON-файлы автоматически парсятся и возвращаются как JSON-ответы API.

Отображение директорий

При включении STATICSITE_USE_DIR_TEMPLATE = True, приложение будет отображать содержимое директорий в виде таблицы с информацией о файлах:

  • Имя файла
  • Размер (в удобном формате: b, Kb, Mb, etc.)
  • Дата последнего изменения

Безопасность

Приложение включает следующие меры безопасности:

  1. Проверка пути: Предотвращает доступ к файлам вне базовой директории
  2. Скрытые файлы: Игнорирует файлы, начинающиеся с точки (.)
  3. Нормализация путей: Защита от path traversal атак

Кастомизация

Шаблон для директорий

Вы можете создать собственный шаблон для отображения директорий. Создайте файл __directory__.html в директории шаблонов вашего проекта:

<!DOCTYPE html>
<html>
<head>
    <title>Содержимое: {{ path }}</title>
</head>
<body>
    <h1>Содержимое директории: {{ path }}</h1>
    <table>
        <tr>
            <th>Имя</th>
            <th>Размер</th>
            <th>Дата изменения</th>
        </tr>
        {% for file in files %}
        <tr>
            <td><a href="{{ file.name }}">{{ file.name }}</a></td>
            <td>{{ file.size }}</td>
            <td>{{ file.date }}</td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

Примеры использования

Служение статического сайта

# urls.py проекта
from django.urls import path, include
from django.conf import settings

urlpatterns = [
    path('', include('staticsite.urls')),  # Корневой URL
]

Мультисайтовость

# urls.py проекта
from django.urls import path
from django.conf import settings
from staticsite.views import view_constructor
import os

urlpatterns = [
    path('site1/', view_constructor(os.path.join(settings.BASE_DIR, 'sites/site1'))),
    path('site2/', view_constructor(os.path.join(settings.BASE_DIR, 'sites/site2'))),
]

API-эндпоинты из JSON

Создайте файл api/data.json:

{
    "users": [
        {"id": 1, "name": "Alice"},
        {"id": 2, "name": "Bob"}
    ]
}

Доступно по адресу: http://localhost:8000/site/api/data.json

Ограничения

  1. Не предназначен для замены Django Static Files в production
  2. Не поддерживает кэширование (используйте nginx или CDN для production)
  3. Не рекомендуется для больших файлов (>100MB)
  4. Все HTML-файлы обрабатываются через движок шаблонов Django, что может замедлить работу при большой нагрузке

Производительность

Для production-окружения рекомендуется:

  1. Использовать веб-сервер (nginx, Apache) для обслуживания статических файлов
  2. Настроить кэширование
  3. Использовать CDN для медиа-файлов

Отладка

При возникновении проблем проверьте:

  1. Правильность пути к базовой директории
  2. Разрешения на чтение файлов
  3. Корректность MIME-типов для нестандартных файлов
  4. Кодировку HTML-файлов (поддерживаются UTF-8 и cp1251)

Лицензия

MIT License

Поддержка

Для отчетов об ошибках и предложений используйте issue tracker на GitHub репозитории проекта.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_static_engine-0.1.6.tar.gz (8.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_static_engine-0.1.6-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file django_static_engine-0.1.6.tar.gz.

File metadata

  • Download URL: django_static_engine-0.1.6.tar.gz
  • Upload date:
  • Size: 8.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for django_static_engine-0.1.6.tar.gz
Algorithm Hash digest
SHA256 e230548f602b6b496d769a564f4ada4f60b5553559c3bdd86f34c7dad1be0986
MD5 8ff54ec479a974db0a15eebf5ccb5044
BLAKE2b-256 6b1100a859f7b52309df91f20ecfc8e0928fa43bc3d1042427eb662044de30b5

See more details on using hashes here.

File details

Details for the file django_static_engine-0.1.6-py3-none-any.whl.

File metadata

File hashes

Hashes for django_static_engine-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 c0f950c64409b3b62f3579ea99a0dd3acfb906342bbe49866d5d3c5c2c169a10
MD5 9f80a9dd69b8905b9f3c52c6d69b1d90
BLAKE2b-256 2cd189f8119c57cf1c720e3c2a3b78c8a6471b7c5bb6918814ec152a5b83c6a0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page