Django Markdownx Trouble - PullRequest
       8

Django Markdownx Trouble

0 голосов
/ 09 апреля 2020

У меня проблемы с уценкой в ​​моем приложении Django. Я пишу блог из учебника, и хочу уценку в своих сообщениях. Я установил Markdownx для Django, и он почти работает.

У меня проблемы с блоками кода. Уценка на странице администратора выглядит иначе, чем при отображении страницы html. Я хотел бы, чтобы мои блоки кода отображались так же, как и в stackoverflow и github. Вместо этого, когда я выполняю форматирование блока кода с тремя `` `, я получаю красный текст.

Ниже приведены мои файлы для приложения, о котором я спрашиваю:


project/urls.py

from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
    path('admin/', admin.site.urls),
    path('projects/', include('projects.urls')),
    path('blog/', include('blog.urls')),
    path('markdownx/', include('markdownx.urls')),
]

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)


project/settings.py

...
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'projects',
    'blog',
    'markdownx',
]
...


app/models.py

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

class Projects(models.Model):
    title = models.CharField(max_length=100)
    short_description = models.TextField()
    long_description = MarkdownxField()
    project_link = models.URLField(max_length=250)

    def formatted_markdown(self):
        return markdownify(self.long_description)


app/admin.py

from django.contrib import admin
from projects.models import Projects
from markdownx.admin import MarkdownxModelAdmin

class ProjectsAdmin(admin.ModelAdmin):
    pass

admin.site.register(Projects, MarkdownxModelAdmin)


app/views.py

from django.shortcuts import render
from projects.models import Projects

def project_index(request):
    projects = Projects.objects.all()
    context = {
        'projects' : projects
    }
    return render(request, 'project_index.html', context)

def project_detail(request, pk):
    project = Projects.objects.get(pk=pk)
    context = {
        'project' : project
    }
    return render(request, 'project_detail.html', context)


app/templates/project_detail.html

{% extends "base.html" %}
{% load static %}

{% block page_content %}
<h1>{{ project.title }}</h1>
<div class="row">
    <div class="col-md-4">
        <h5>About the project:</h5>
        <p>{{ project.formatted_markdown|safe|linebreaks }}</p>
        <br>
        <h5>Project Link</h5>
        <a href="{{  project.project_link }}" class="btn btn-primary" >Github</a>
    </div>
</div>
{% endblock %}

Это первое изображение - вид страницы администратора.

Admin page view


Это второе изображение шаблона html просмотр страницы.
Template page view

1 Ответ

0 голосов
/ 10 апреля 2020

Вам необходимо включить правильные расширения Markdown и, возможно, указать некоторые CSS.

В качестве напоминания, блоки огражденного кода (блоки с тройными обратными чертами ```) являются нестандартной функцией. Согласно документации, Markdownx использует Python -Markdown для анализа текста Markdown, а Python -Markdown по умолчанию поддерживает только стандартные функции Markdown (как определено здесь ). Поэтому вам нужно включить расширение fenced_code для правильного синтаксического анализа кодированных блоков кода.

Вам также необходимо включить расширение codehilite, если вы хотите Ваши кодовые блоки должны быть выделены. Вам также необходимо установить пакет pygments, который использует codehilite. Вам также нужно будет указать CSS, чтобы определить стили (цвета) для выделенного кода. Пользователь GitHub richeland предоставил ряд различных CSS таблиц стилей , которые работают с Pygments вместе с предварительным просмотром каждой темы.

Согласно документации, Markdownx имеет MARKDOWNX_MARKDOWN_EXTENSIONS настройка для включения расширений. Поэтому вам может потребоваться добавить следующее в ваш settings.py файл:

MARKDOWNX_MARKDOWN_EXTENSIONS = ['fenced_code', 'codehilite']

Чтобы установить фрагменты, выполните следующую команду:

pip install pygments

Затем, выбрав нужную тему подсветки, скопируйте соответствующий CSS в свои файлы и включите ссылку на него в свои шаблоны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...