# Django MarkdownX

***

**1. Basic Markdown Field:**

```python
from markdownx.models import MarkdownxField

class MyModel(models.Model):
    content = MarkdownxField(verbose_name='Content')
```

**2. Customizing MarkdownX Editor:**

```python
from markdownx.admin import MarkdownxModelAdmin

class MyModelAdmin(MarkdownxModelAdmin):
    markdownx_settings = {
        'default': {
            'plugins': ['markdown-emoji', 'mentions'],
            'editor_theme': 'github'
        }
    }
```

**3. Previewing Markdown:**

```python
from django.shortcuts import render

def preview_markdown(request):
    content = request.POST.get('content', '')
    return render(request, 'preview.html', {'content': content})
```

**4. Django Forms Integration:**

```python
from markdownx.widgets import MarkdownxWidget
from django import forms

class MyForm(forms.ModelForm):
    content = forms.CharField(widget=MarkdownxWidget())
```

**5. Filtering Markdown Content:**

```python
from django.db.models import Q

# Filter for posts containing a particular phrase
posts = Post.objects.filter(Q(content__contains='my phrase'))
```

**6. Excluding Markdown Formatting:**

```python
from django.utils.html import strip_tags

content = strip_tags(post.content)
```

**7. Rendering Markdown in HTML:**

```python
from markdownx.utils import render_markdown

html = render_markdown(post.content)
```

**8. Customizing Markdown Parser:**

```python
from markdown import Extension
from markdownx.utils import get_markdownx_parser

class MyExtension(Extension):
    # ...

parser = get_markdownx_parser()
parser.register(MyExtension)
```

**9. Using MarkdownX in Templates:**

```html

<div data-gb-custom-block data-tag="load"></div>

<div data-gb-custom-block data-tag="markdown"></div>
```

**10. Markdown Field in Admin Interface:**

```python
from django.contrib import admin
from markdownx.admin import MarkdownxModelAdmin

class MyModelAdmin(MarkdownxModelAdmin):
    pass
```

**11. Previewing Markdown in Admin:**

```python
from markdownx.admin import MarkdownxModelAdmin
from django.utils.safestring import mark_safe

class MyModelAdmin(MarkdownxModelAdmin):
    readonly_fields = ['preview']

    def preview(self, obj):
        rendered = markdownx.utils.render_markdown(obj.content)
        return mark_safe(rendered)
```

**12. Customizing Markdown Field Appearance:**

```css
/* Style the MarkdownX field in the admin interface */
.markdownx .CodeMirror {
    width: 100%;
    height: auto;
}
```

**13. Markdown Paragraph Blocks:**

```python
from markdownx.models import MarkdownxParagraph

class MyParagraph(MarkdownxParagraph):
    # ...
```

**14. Markdown Section Blocks:**

```python
from markdownx.models import MarkdownxSection

class MySection(MarkdownxSection):
    # ...
```

**15. MarkdownX Textfield in Django REST Framework Serializers:**

```python
from markdownx.fields import MarkdownxTextField

class MyModelSerializer(serializers.ModelSerializer):
    content = MarkdownxTextField()
```

**16. MarkdownX Block Renderer:**

```python
from markdownx.utils import block_renderers

class MyRenderer:
    # ...

block_renderers.register_renderer(MyRenderer)
```

**17. MarkdownX Editor Customizations in JavaScript:**

```javascript
// Register a custom editor plugin
markdownx.settings.plugins.push({
    id: 'my-plugin',
    onDocumentLoad: (ed) => {
        // ...
    }
});
```

**18. Capturing Markdown Parse Events:**

```python
from markdownx.models import MarkdownxEvent

def my_event_handler(sender, event, **kwargs):
    # ...

MarkdownxEvent.register_handler(my_event_handler)
```

**19. MarkdownX Media Configuration:**

```python
MARKDOWNX_MEDIA_PATH = 'custom/media/path'
```

**20. MarkdownX Extension Configuration:**

```python
MARKDOWNX_EXTENSIONS_CONFIGS = {
    'markdown.extensions.codehilite': {
        'linenums': True
    }
}
```

**21. MarkdownX Template Filter:**

```python
from django import template
from markdownx.utils import render_markdown

register = template.Library()

@register.filter
def markdown(value):
    return render_markdown(value)
```

**22. MarkdownX ModelField Override:**

```python
from django.db import models
from markdownx.models import MarkdownxField

class CustomMarkdownxField(MarkdownxField):
    # ...
```

**23. MarkdownX Formatter Import:**

```python
from markdownx.utils import MarkdownxFormatter

# Create a formatter instance
formatter = MarkdownxFormatter()

# Render Markdown using the formatter
html = formatter.render(content)
```

**24. MarkdownX ContentBlock Image Uploader:**

```python
from markdownx.models import ContentBlock

def my_image_upload_handler(image_name, image_data):
    # ...

ContentBlock.add_handler('image', my_image_upload_handler)
```

**25. MarkdownX Widget Customizations:**

```python
from markdownx.widgets import MarkdownxWidget

class CustomMarkdownxWidget(MarkdownxWidget):
    # ...
```

**26. MarkdownX Inline Style Configuration:**

```python
MARKDOWNX_MARKDOWN_EXTENSIONS = {
    'mdx_inline_style': {
        'active': True
    }
}
```

**27. MarkdownX URL Configuration:**

```python
# In urls.py
from markdownx import urls

urlpatterns = [
    # ...
    url(r'^markdownx/', include(urls)),
    # ...
]
```

**28. MarkdownX Celery Task:**

```python
from django.core.mail import send_mail
from markdownx.tasks import render_markdown_task

# Send an email with rendered Markdown content
def send_email_with_markdown(subject, content, recipient):
    html = render_markdown_task.apply_async(args=(content,)).get()
    send_mail(subject, html, None, [recipient])
```

**29. MarkdownX Localization:**

```python
from markdownx.settings import MARKDOWNX_LANGUAGE_MAP

MARKDOWNX_LANGUAGE_MAP['fr'] = 'markdown_fr'
```

**30. MarkdownX Safe Mode:**

```python
MARKDOWNX_SAFE_MODE = True
```

**31. MarkdownX Google Analytics Tracking:**

```python
MARKDOWNX_GOOGLE_ANALYTICS_CODE = 'UA-XXXXXX-X'
```

**32. MarkdownX Admin Editor Configuration:**

```python
MARKDOWNX_ADMIN_CONFIG = {
    'default': {
        'plugins': [
            # ...
        ],
        'editor_theme': 'solarized'
    }
}
```

**33. MarkdownX Custom Content Processor:**

```python
from markdownx.utils import get_markdownx_content_processors

def my_content_processor(text):
    # ...

get_markdownx_content_processors().add('my_processor', my_content_processor)
```

**34. MarkdownX Preview Style Configuration:**

```python
MARKDOWNX_PREVIEW_HTML_TEMPLATE = 'markdownx/preview.html'
```

**35. MarkdownX Textfield in Django ModelForms:**

```python
from markdownx.widgets import MarkdownxWidget
from django import forms

class MyModelForm(forms.ModelForm):
    content = forms.CharField(widget=MarkdownxWidget())
```

**36. MarkdownX Context Processor:**

```python
from markdownx.context_processors import markdownx

def my_context_processor(request):
    context = markdownx(request)
    # ...
    return context
```
