Как отобразить содержимое Markdownx в виде HTML в проекте блога на Django?
Я выполнил все шаги по установке markdownx, как указано.
Я установил пакет django-markdownx
с помощью pip install django-markdownx
.
Я добавил 'markdownx'
к моему INSTALLED_APPS
в settings.py
.
Я определил MarkdownxField
в модели записи блога для хранения содержимого в формате Markdown.
Но моя проблема в том, что я не уверен в правильном использовании тега шаблона для отображения содержимого в формате Markdown в HTML.
вот мой models.py:
from django.db import models
from markdownx.models import MarkdownxField
class Article(models.Model):
title = models.CharField(max_length=200)
content = MarkdownxField()
def __str__(self):
это мой viwes.py:
from .models import Article
def post_list(request):
articles = Article.objects.all()
return render(request, 'blog/post_list.html', {'articles': articles})
вот мой admins.py:
from django.contrib import admin
from .models import Article
from markdownx.admin import MarkdownxModelAdmin
admin.site.register(Article, MarkdownxModelAdmin)
вот мой urls.py из проекта (не приложения):
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('markdownx/', include('markdownx.urls')),
path('', include("blog.urls")),
]
В админке он правильно показывает превью, но я использовал много тегов для преобразования markdownx в html, но у меня ничего не получилось. Я использовал:
{% for article in articles %}
<article>
<h1>{{ article.title }}</h1>
<div>{{ article.content|markdown|safe }}</div>
</article>
{% endfor %}
, но я получил TemplateSyntaxError
.
Я использовал:
{% for article in articles %}
<article>
<h1>{{ article.title }}</h1>
<div>{{ article.content|markdownify }}</div>
</article>
{% endfor %}
я получил TemplateSyntaxError
.
Также я использовал:
{% for article in articles %}
<article>
<h1>{{ article.title }}</h1>
<div>{{ article.formatted_markdown|safe|linebreaks }}</div>
</article>
{% endfor %}
снова у меня только заголовок и содержимое или поле markdown не отображается вообще. Я не смог найти ни одного примера в документации по django-markdownx, на других сайтах они использовали одно из вышеупомянутых решений, которые я пробовал, но не преуспел .
Судя по всему, markdownx выполняет рендеринг уценки и преобразование HTML с помощью widdget поля формы и javascript (см. markdownx docs). Но вы не используете поле формы - вы используете поле модели напрямую - поэтому markdownx здесь ничем не поможет.
Либо вы находите другой способ превратить уценку в HTML (в django нет встроенных тегов или фильтров для этого), либо вы используете формы в своих шаблонах, чтобы markdownx мог использовать свой скрипт.