【问题标题】:Django Markdownx TroubleDjango Markdownx 麻烦
【发布时间】:2020-07-21 11:33:21
【问题描述】:

我的 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 页面视图。

【问题讨论】:

    标签: python django markdown django-markdownx


    【解决方案1】:

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

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

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

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

    MARKDOWNX_MARKDOWN_EXTENSIONS = ['fenced_code', 'codehilite']
    

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

    pip install pygments
    

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

    【讨论】:

    • 感谢您的回答,绝对有帮助!虽然,它仍然不起作用。我进一步查看了文档,似乎一些文档站点处于脱机状态。我设法发现MARKDOWNX_MARKDOWN_EXTENSIONS = ['markdown.extensions.codehilite'] 看起来像那样。但这仍然没有奏效。我安装了 pygments,但不确定将 css 文件放在哪里,所以我将它们放在我的静态目录中。我将进一步研究并尝试不同的事情。您为我指明了方向,我很感激!
    • 您是否在页面模板中添加了指向 CSS 文件的链接?如果您不链接到它,CSS 将不会做任何事情。
    • 请注意,虽然没有错,markdown.extensions.codehilite 是一种旧的、已弃用的启用扩展的方法。使用较新版本的 Markdown codehilite 可以正常工作。
    • 这有点尴尬,但我不知道我是否正确添加了 CSS 文件。以下是我如何从您给我的链接中包含选择的 css 文件:&lt;link href="{% static 'defualt.css' %}" rel="stylesheet" type="text/css"&gt;。这一行在我的应用程序模板中,这就是我在帖子中展示的内容。我的项目根目录中也有我的静态目录,其中包含default.css 样式表。我一直在网上寻找可能的解决方案,我看到了大量旧文档,但没有更新的文档。
    • 这对我来说看起来不错,但是我已经很多年没有使用 Django,所以我无法评论 {% static %} 的事情。为确保一切正确,请启动开发服务器,在我们的浏览器中加载一个页面,并使用浏览器的开发工具来确认文件被正确引用并且规则正在应用于代码块。
    猜你喜欢
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 2010-11-11
    • 2011-06-12
    相关资源
    最近更新 更多