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
        )
    )

📄 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.0.4.tar.gz (9.0 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.0.4-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for django_admin_monaco_editor-1.0.4.tar.gz
Algorithm Hash digest
SHA256 16fc04e986e2400736658ca31226b22895bf857c52d5c053941e33c67f2bcf0b
MD5 d40415bf626ff5ad7e6a39abedd1d019
BLAKE2b-256 d66a65d317c3592c867eb213bc14c75c9e26dbf7598ce911935b3f0e89de3893

See more details on using hashes here.

Provenance

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

Publisher: publish-pypi.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.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for django_admin_monaco_editor-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 46689a23bcc7e5b1fd1df25822bf4d7f22bd1615a5d581fa5e35b7299632223e
MD5 1b44922c239c8e3bbffe14095073d141
BLAKE2b-256 222a38b9554d48cba5a3219b0db6706a8891ce6c3a857c156f6dc0514ebed47a

See more details on using hashes here.

Provenance

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

Publisher: publish-pypi.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