Возможно ли добавить возможность прикреплять блоки кода к форме поста?

Я пытался найти что-нибудь об этом некоторое время, но я не знаю, может это моя формулировка, но я не могу найти ничего об этом.

В общем... Я работаю над проектом для школы, и в основном это сайт, который делает много вещей, и одна из этих вещей - это что-то вроде mini-stackoverflow, но только для сообщества моей школы. Поэтому я разработал форму для сообщения, используя crispy forms, однако я не могу найти никакой информации о том, как добавить возможность писать в блоках кода в форму (как мы делаем здесь, на Stack Overflow).

Вот как выглядит форма в коде:

Шаблон:

<form method="POST" enctype="multipart/form-data">
                    {% csrf_token %}
                    <fieldset class="form-group">
                        <legend class="border-bottom mb-4">Nueva Publicación</legend>
                        {{ form|crispy }}
                    </fieldset>
                    <div>
                    <div class="form-group">
                        <button class="btn btn-outline-info" type="submit">Crear Publicación</button>
                    </div>
                </form>

Модели

class Post(models.Model):
titulo  = models.CharField(max_length=150)
contenido = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
imagen = models.ImageField(default='default.jpg', upload_to='blog_images')

def __str__(self):
    return self.titulo

def get_absolute_url(self):
    return reverse("post-detail", kwargs={"pk": self.pk})

Визуально:

form_post

Если вам нужно что-то еще, чтобы помочь, пожалуйста, скажите мне, и я предоставлю это как можно скорее.

Вам нужен модуль, который может переводить текст в формате Markdown в HTML. Похоже, что django-markdownx может сделать это для вас.

<<<Просто следуйте инструкциям

Installation и Getting Started, которые я кратко изложил ниже.

Сначала установите MarkdownX:

pip install django-markdownx

В settings.py добавьте его в список установленных приложений:

INSTALLED_APPS = (
    # [...]
    'markdownx',
)

В urls.py добавьте URL MarkdownX:

urlpatterns = [
    # [...]
    path('markdownx/', include('markdownx.urls')),
]

Убедитесь, что у вас есть параметр STATIC_ROOT в settings.py. Эта строка создаст каталог static в корневой папке вашего проекта:

STATIC_ROOT = BASE_DIR / 'static'

Добавьте статические активы MarkdownX в STATIC_ROOT:

python3 manage.py collectstatic

Измените Post.contenido на использование MarkdownxField:

from markdownx.models import MarkdownxField
from markdownx.utils import markdownify

class Post(models.Model):
    # title = ...
    contenido = MarkdownxField() # not models.TextField()
    # date_posted, author, etc.

    def formatted(self):
        "Returns formatted HTML for post content."
        return markdownify(self.contenido)

В вашем шаблоне добавьте {{ form.media }} после тега </form>.

Теперь содержимое вашего поста должно отображаться с форматированием Markdown всякий раз, когда вы используете {{ post.formatted|safe }} в шаблоне, например, так:

{% extends "base.html" %}

{% block content %}
<h2>{{ object.title }}</h2>
{{ object.formatted|safe }}
{% endblock %}

Я протестировал это с Django 4.0.2, django-markdownx 3.0.1 и markdown 3.3.6.

Вернуться на верх