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.3.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.3-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for django_admin_monaco_editor-1.1.3.tar.gz
Algorithm Hash digest
SHA256 d05dd5bd42b04bc3efdd60a7baafaef19f4fa2195c435d65491f984fa3af78d2
MD5 4042e23307cb812e2c29fd40c16c33d7
BLAKE2b-256 d688c94d14e73698ff5f020fa950f9995d7180ca7c4157a5be78f6cb0bbc711f

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_admin_monaco_editor-1.1.3.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.3-py3-none-any.whl.

File metadata

File hashes

Hashes for django_admin_monaco_editor-1.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 df464de973c05c50de1b0ad18fa61ae2eb36fc35ec2ab252c32ea0d52f81a116
MD5 123a0236a4d349678e3b3105e503261a
BLAKE2b-256 3577297c37aca73cfe3325a6245d08f43f13c3a9e660f2736764375d5386fd27

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_admin_monaco_editor-1.1.3-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