首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:要将markdown2应用于通用视图渲染,应该重写哪个方法或函数?

Django:要将markdown2应用于通用视图渲染,应该重写哪个方法或函数?
EN

Stack Overflow用户
提问于 2020-09-06 17:18:20
回答 1查看 119关注 0票数 1

我能够应用Markdown2将数据库中标记好的文本转换为在模板HTML页面上呈现的html。

相关代码:

views.py

代码语言:javascript
复制
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

代码语言:javascript
复制
{% block content %}
{{ mdentry|safe }}
{% endblock %}

问题是如何将Markdown2转换应用于所有样板python代码都在django服务器代码中的通用DetailView。我知道我必须在django服务器代码中找到相关的方法或函数,并将其覆盖为泛型视图中的本地方法,以完成Markdown2转换。现在,detailview类只是:

代码语言:javascript
复制
class EntryDetailView(generic.DetailView):
    model = Entry
    slug_field = 'subject'
    slug_url_kwarg = 'subject'

将对象呈现到视图的其余功能嵌入在django服务器代码中。我需要访问相关的代码来覆盖它作为本地方法来获得Markdown2转换。它会是哪个类的哪个方法呢?或者,markdown2转换可以通过某种方式直接在模板上完成吗?

包的response.py中的HttpResponse(HttpResponseBase)类中的content(self,value)方法可能是覆盖ıde的很好的候选方法。代码如下所示。

代码语言:javascript
复制
    @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

代码语言:javascript
复制
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

代码语言:javascript
复制
{% 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时,我得到以下异常:

代码语言:javascript
复制
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?非常感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-06 22:17:00

您可以在模板中直接使用Markdown2。首先,确保将django_markdown2添加到您的INSTALLED_APPS中。然后在您的模板中,在顶部添加{% load md2 %}。然后,您可以使用模板标记呈现标记,如{{ page.content|markdown }}

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63762550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档