Skip to main content

Monaco Editor Widget for Django.

Project description

Django Monaco Editor

Integration of Monaco Editor (VSCode's code editor) for Django forms and admin.

🚀 Features

  • Easy Integration: Simply use MonacoField instead of TextField
  • Flexible Configuration: Programming language, themes, sizes, editor options
  • Settings Support: Global configuration via settings.py
  • CDN Loading: Package stays lightweight
  • Multiple Editors: Works with multiple editors on the same page
  • Django Admin Integration: Support for inline forms and dynamic forms
  • Automatic Layout: Adapts to window resizing

📦 Installation

Install the package from PyPI:

pip install django-admin-monaco-editor

Add django_monaco_editor to INSTALLED_APPS in settings.py:

# settings.py
INSTALLED_APPS = [
    # ...
    'django.contrib.admin',
    # ...
    'django_monaco_editor',
]

🎯 Basic Usage

In Models

# myapp/models.py
from django.db import models
from django_monaco_editor.fields import MonacoField

class Snippet(models.Model):
    title = models.CharField(max_length=200)

    # Simple Python code (uses default settings)
    python_code = MonacoField(blank=True)

    # JSON with light theme
    config_json = MonacoField(
        language='json',
        theme='vs',
        blank=True,
        help_text="Enter configuration in JSON format"
    )

    # JavaScript with custom settings
    js_code = MonacoField(
        language='javascript',
        theme='vs-dark',
        height=600,
        editor_options={
            'fontSize': 16,
            'minimap': {'enabled': False},
            'wordWrap': 'on'
        }
    )

    def __str__(self):
        return self.title

Register in Django Admin

# myapp/admin.py
from django.contrib import admin
from .models import Snippet

admin.site.register(Snippet)

⚙️ Configuration in settings.py

You can set global configuration for all Monaco editors:

# settings.py

MONACO_EDITOR_CONFIG = {
    # Default programming language
    'language': 'python',

    # Editor theme: 'vs', 'vs-dark', 'hc-black'
    'theme': 'vs-dark',

    # Editor dimensions
    'height': 400,  # pixels or CSS value like '100%'
    'width': '100%',

    # Monaco Editor CDN version
    'monaco_cdn_version': '0.53.0',

    # Custom CDN URL (optional)
    'monaco_cdn_url': 'https://cdn.jsdelivr.net/npm/monaco-editor@{version}/min/vs',

    # Monaco Editor options
    'editor_options': {
        'automaticLayout': True,
        'fontSize': 14,
        'tabSize': 4,
        'wordWrap': 'off',
        'lineNumbers': 'on',
        'minimap': {
            'enabled': True
        },
        'scrollBeyondLastLine': False,
        'renderWhitespace': 'none',
        'folding': True,
        'links': True,
        'colorDecorators': True,
    }
}

🎨 MonacoField Parameters

Parameter Type Default Description
language str 'python' Programming language for syntax highlighting
theme str 'vs-dark' Editor theme: 'vs', 'vs-dark', 'hc-black'
height int or str 400 Editor height (in pixels or CSS)
width int or str '100%' Editor width (in pixels or CSS)
readonly bool False Whether the editor is read-only
editor_options dict {} Additional Monaco Editor options

Supported Languages

Monaco Editor supports many programming languages:

python, javascript, typescript, json, html, css, scss, less, xml, markdown, sql, shell, bash, powershell, yaml, dockerfile, go, rust, java, c, cpp, csharp, php, ruby, swift, kotlin, and many more.

📚 Usage Examples

Different Programming Languages

class CodeSnippet(models.Model):
    python_code = MonacoField(language='python')
    javascript_code = MonacoField(language='javascript')
    html_code = MonacoField(language='html')
    css_code = MonacoField(language='css')
    json_config = MonacoField(language='json')
    sql_query = MonacoField(language='sql')

Custom Sizes

class Document(models.Model):
    # Large editor
    content = MonacoField(height=800, width='100%')

    # Small editor
    note = MonacoField(height=200)

Additional Editor Options

class Settings(models.Model):
    config = MonacoField(
        language='json',
        editor_options={
            'fontSize': 16,
            'wordWrap': 'on',
            'minimap': {'enabled': False},
            'lineNumbers': 'off',
            'glyphMargin': False,
            'folding': False,
            'lineDecorationsWidth': 0,
            'lineNumbersMinChars': 0
        }
    )

Read-Only Mode

class Log(models.Model):
    log_content = MonacoField(
        readonly=True,
        theme='vs',
        height=600
    )

🔧 Using the Widget Directly

You can also use the widget directly in forms:

from django import forms
from django_monaco_editor.widgets import MonacoEditorWidget

class CodeForm(forms.Form):
    code = forms.CharField(
        widget=MonacoEditorWidget(
            language='python',
            theme='vs-dark',
            height=500
        )
    )

🎯 JavaScript Events

The editor dispatches a monacoEditorReady event when initialized:

// Listen for editor ready event
document.addEventListener('monacoEditorReady', function(event) {
    const editor = event.detail.editor;  // Monaco editor instance
    const elementId = event.detail.elementId;  // Container ID

    // Now you can work with the editor
    console.log('Editor ready:', elementId);
});

📄 License

MIT License

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_admin_monaco_editor-1.1.4.tar.gz (9.3 kB view details)

Uploaded Source

Built Distribution

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

django_admin_monaco_editor-1.1.4-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

Details for the file django_admin_monaco_editor-1.1.4.tar.gz.

File metadata

File hashes

Hashes for django_admin_monaco_editor-1.1.4.tar.gz
Algorithm Hash digest
SHA256 ffe2b89214731a4b6594a7c5c0235793f97c3fc5eb177378ccaade7e6d4b11f0
MD5 3757ed4f43a5ba62bdb390be36e3b7c2
BLAKE2b-256 e05559ea7fed1d855fe0c13ea7a7a23cfc763db2d54426f3f939f6a241586b4b

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_admin_monaco_editor-1.1.4.tar.gz:

Publisher: release.yml on john-psina/django-monaco-editor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_admin_monaco_editor-1.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for django_admin_monaco_editor-1.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 8f5b4eea7758036dd3a7d8d82cde3a718b00136e615e03a7943607d7c7325f57
MD5 030c23ac9513b1051dc3005803046ba9
BLAKE2b-256 79d97b77188afd9e731c6b9acbcc7d7ee679977ddeb11cf35a0861ccd67610c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_admin_monaco_editor-1.1.4-py3-none-any.whl:

Publisher: release.yml on john-psina/django-monaco-editor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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