2

我在我的 Django 应用程序上遇到降价问题。我正在从教程中写博客,并希望在我的帖子中降价。我为 Django 安装了Markdownx,它几乎可以工作。

当涉及到代码块时,我遇到了问题。markdown 在管理页面中看起来与在 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 %}

第一个图像是管理页面视图。

管理员页面视图


第二张图片是模板 html 页面视图。
模板页面视图

4

1 回答 1

1

您需要启用正确的 Markdown 扩展并可能提供一些 CSS。

提醒一下,围栏代码块(用三个反引号分隔的块```)是非标准功能。根据文档,Markdownx 使用 Python-Markdown 来解析 Markdown 文本,而 Python-Markdown 默认仅支持标准的 Markdown 功能(定义见此处)。因此,您需要启用fenced_code扩展以正确解析受防护的代码块。

codehilite如果要突出显示代码块,还需要启用扩展。您还需要安装使用的pygments软件包codehilite。您还需要提供 CSS 来定义突出显示代码的样式(颜色)。GitHub 用户 Richeland 提供了许多与 Pygments 一起使用的不同CSS 样式表以及每个主题的预览。

根据文档,Markdownx 有一个MARKDOWNX_MARKDOWN_EXTENSIONS设置来启用扩展。因此,您可能需要将以下内容添加到您的settings.py文件中:

MARKDOWNX_MARKDOWN_EXTENSIONS = ['fenced_code', 'codehilite']

要安装 pygments,请运行以下命令:

pip install pygments

然后在选择您喜欢的突出显示主题后,将适当的 CSS 复制到您的文件中,并在模板中包含指向它的链接。

于 2020-04-10T00:05:35.993 回答