问题
使用markdow渲染保存的文本,实现在HTML中根据markdown格式显示文本内容。同时用pygments实现代码高亮的功能。
这方面网上很多例子,只是稍微有些坑,有可能是版本问题引起的,在我自己实践的时候主要遇到了两个问题:
- 使用generic view的时候,如果重写object,使其输出经过markdown格式渲染后的内容;
- markdown的其他格式都能正常解析,但是代码格式无法正常解析;
- css文件如何正确的引用到html模板中,总是提示css file not found;
解决方案
- 可以直接重写generic view中的def get_object(self, queryset=None)
from markdown import markdown
class DetailView(generic.DetailView):
template_name = 'article/detail.html'
model = Posts
def get_object(self, queryset=None):
posts = super(DetailView, self).get_object(queryset = None)
posts.content = markdown(posts.content,extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
'markdown.extensions.toc',
])
return posts
- 如上面代码显示,除了import markdown之外,还需要船体额外的参数extensions,而其中codehilite就是用于代码高亮的部分。这里如果不添加的话就会出现上述问题。
-
css文件路径如下:
在APP路径下创建static文件夹,并把css文件放入其中,同时需要修改settings.py文件中的STATICFILES_DIRS属性,将路径添加进去才行。如果是默认路径的话是放在'mysite/static'路径下
实在不行还可以在执行以下
python manage.py collectstatic
这个命令会自动生成project/projectname/static路径,并创建相关的一些css/js/img文件夹