是否可以显示HTML代码,如css样式的表而不是json / csv / text / whatever? 我试图将html作为字符串发送,但它只是插入html,如原始文本
提前致谢!
答案 0 :(得分:0)
您是否安装了markdown和django-filter软件包?这些都是让我们的HTML浏览功能适用于最近的项目所必需的。
sudo pip install markdown
sudo pip install django-filter
答案 1 :(得分:0)
这是一个老问题,但我刚刚完成了这个并想分享我的解决方案,以防其他人也通过它。
我最终要做的是填充rest_framework.compat.apply_markdown
函数以启用表扩展。在 settings.py 的末尾,我添加了以下内容:
# Monkey patch rest_framework's markdown rendering function, to enable the
# tables extension.
import markdown
import rest_framework.compat
def apply_markdown(text):
"""
Simple wrapper around :func:`markdown.markdown` to set the base level
of '#' style headers to <h2>.
"""
extensions = ['markdown.extensions.toc', 'markdown.extensions.tables']
extension_configs = {
'markdown.extensions.toc': {
'baselevel': '2'
}
}
md = markdown.Markdown(
extensions=extensions, extension_configs=extension_configs
)
return md.convert(text)
rest_framework.compat.apply_markdown = apply_markdown
在这种情况下,我使用DRF 3.6.4和降价2.6.9。在最初的rest_framework.compat.apply_markdown
函数中,有一些代码根据markdown的版本设置了不同的选项,但我在垫片中省略了它。
另请注意,默认表格扩展名可能无法为您提供所需方式的表格。我最终将 markdown / extensions / tables.py 复制到新模块中,并将class="table"
添加到table
元素。该更改的来源是in a gist。有关markdown中有限表格语法的详细信息,请参阅this thread。
答案 2 :(得分:0)
对于djangorestframework>=3.7
,请更新默认视图描述功能。
https://www.django-rest-framework.org/api-guide/settings/#view_description_function
REST_FRAMEWORK = {
# Module path to a callable which should have a signature (self, html=False)
'VIEW_DESCRIPTION_FUNCTION': 'app_name.view_description.get_view_description',
}
view_description.py
import markdown
from django.utils.encoding import smart_text
from django.utils.html import escape
from django.utils.safestring import mark_safe
from rest_framework.compat import (
HEADERID_EXT_PATH, LEVEL_PARAM, md_filter_add_syntax_highlight
)
from rest_framework.utils import formatting
TABLE_EXTENSION_PATH = 'markdown.extensions.tables'
def _apply_markdown(text):
extensions = [HEADERID_EXT_PATH, TABLE_EXTENSION_PATH]
extension_configs = {
HEADERID_EXT_PATH: {
LEVEL_PARAM: '2'
}
}
md = markdown.Markdown(
extensions=extensions, extension_configs=extension_configs
)
md_filter_add_syntax_highlight(md)
return md.convert(text)
def get_view_description(view_cls, html=False):
description = view_cls.__doc__ or ''
description = formatting.dedent(smart_text(description))
if html:
return mark_safe(_apply_markdown(description))
return description