我能够应用Markdown2将数据库中标记好的文本转换为在模板HTML页面上呈现的html。
相关代码:
views.py
page = entry.content
page_converted = markdown2.Markdown().convert(page)
context = {'mdentry': page_converted, "subject":subject}
return render(request, "wikiencyc/md_entry.html", context)md_entry.html
{% block content %}
{{ mdentry|safe }}
{% endblock %}问题是如何将Markdown2转换应用于所有样板python代码都在django服务器代码中的通用DetailView。我知道我必须在django服务器代码中找到相关的方法或函数,并将其覆盖为泛型视图中的本地方法,以完成Markdown2转换。现在,detailview类只是:
class EntryDetailView(generic.DetailView):
model = Entry
slug_field = 'subject'
slug_url_kwarg = 'subject'将对象呈现到视图的其余功能嵌入在django服务器代码中。我需要访问相关的代码来覆盖它作为本地方法来获得Markdown2转换。它会是哪个类的哪个方法呢?或者,markdown2转换可以通过某种方式直接在模板上完成吗?
包的response.py中的HttpResponse(HttpResponseBase)类中的content(self,value)方法可能是覆盖ıde的很好的候选方法。代码如下所示。
@content.setter
def content(self, value):
# Consume iterators upon assignment to allow repeated iteration.
# print("line 314 in response, value = ", value)
if hasattr(value, '__iter__') and not isinstance(value, (bytes, str)):
content = b''.join(self.make_bytes(chunk) for chunk in value)
if hasattr(value, 'close'):
try:
value.close()
except Exception:
pass
else:
content = self.make_bytes(value)
# Create a list of properly encoded bytestrings to support write().
self._container = [content]我不确定如何解析内容,以便将文本子集转换为HTML。非常感谢您的帮助。
2020年9月7日更新:
关于第一个答案中的建议,可以在模板中进行标记。这要简单得多,也更有意义。根据建议,我在INSTALLED_APPS中添加了django_markdown2,并在模板标记中实现了上述标记语法。
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'wikiencyc',
'django_markdown2',
]entry_detail.html
{% load md2 %}
<h4>{{ entry.subject }} </h4>
<br><br>
<p>
{{ entry.content|markdown:"safe" }}
</p>但是,django服务器无法启动,并且我收到了响应python manage.py runserver命令的一长串异常。如果我从INSTALLED_APPS中注释掉' django _markdown2',django服务器启动正常,但当应用程序试图在模板中加载md2时,我得到以下异常:
Request Method: GET
Request URL: http://127.0.0.1:8000/wikiencyc/entry/8
Django Version: 3.0.8
Exception Type: TemplateSyntaxError
Exception Value:
'md2' is not a registered tag library. Must be one of:
admin_list
admin_modify
admin_urls
cache
i18n
l10n
log
static
tz根据this source的说法,我需要
将django_markdown2放在PYTHONPATH中的某个位置
我没有与PYTHONPATH打交道的经验。我使用Windows7作为操作系统,Python版本3.8和Django版本3.0.8。
如何将django_markdown2添加到PYTHONPATH?非常感谢您的帮助。
发布于 2020-09-06 22:17:00
您可以在模板中直接使用Markdown2。首先,确保将django_markdown2添加到您的INSTALLED_APPS中。然后在您的模板中,在顶部添加{% load md2 %}。然后,您可以使用模板标记呈现标记,如{{ page.content|markdown }}
https://stackoverflow.com/questions/63762550
复制相似问题