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

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for django_admin_monaco_editor-1.0.1.tar.gz
Algorithm Hash digest
SHA256 b41c319fed7f16ea6e6ed2af2a3ca7b91cd375276a79574b41087dc22d8a26a7
MD5 cbb1aae759fa0f784d87752eade914b8
BLAKE2b-256 af389b4cba8289891494077fca5c1989cb4876312d0f3a0a27927818e2c72947

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for django_admin_monaco_editor-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f7cb1305710db186a3193be939436497e26e79b9840623fbbfe212cc2d5175e0
MD5 f16afcdc75af776bee9c17b3c422e1e8
BLAKE2b-256 7b92693470f066feb660b059aae9e987938a51e355e0776eadd2d75f2050e742

See more details on using hashes here.

Provenance

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