0

'module' object is not callable使用以下模板标签:

projectname/controlpanel/templatetags/__init__.py(空白文件)

projectname/controlpanel/templatetags/md_to_html.py

from django import template
from markdown import markdown

register = template.Library()


@register.filter(name='to_html')
def to_html(md):
    return markdown(md)

在我的一个观点中,我返回{'campaign': campaign},作为具有TextFieldcampaign的模型的一个实例。description

<div class="span8" id="editor2">
   {{ selected_campaign.description|to_html }}
</div>
4

2 回答 2

1

将此添加到 INSTALLED_APPS

'django.contrib.markup',

将 markdown( http://pypi.python.org/pypi/Markdown ) 复制到您的 django 项目目录

然后使用

{% load markup %}
<div class="span8" id="editor2">
      {{ selected_campaign.description|markdown:"safe" }}
</div>

更新:

django.contrib.markup在 Django 1.5 中已弃用。这是降价过滤器的简单替换。

删除'django.contrib.markup',线INSTALLED_APPS

创建模板标签的步骤:

  • templatetags在您的任何文件夹中添加一个文件app夹。
  • templatetags文件夹内添加一个空文件__init__.py

markup.py在里面添加templatetags这些代码:

from django import template
from django.utils.safestring import mark_safe
import markdown as mkdn

register = template.Library()     
@register.filter
def markdown(value,smode=None):
    return mark_safe(mkdn.markdown(value, safe_mode='escape'))
于 2013-06-22T04:49:44.570 回答
0

好吧,我不知道为什么,但markdown似乎在 django 的函数中不起作用,例如我在 django shell(python manage.py shell)中输入了这个:

from markdown import markdown

def yes():
     return markdown("YES")

它给了我下一个错误:

NameError: global name 'markdown' is not defined

这似乎有效

def yes():
     from markdown import markdown
     return markdown("YES")

在 django shell 之外,第一种方法可以正常工作,希望对您有所帮助!

于 2013-06-22T04:43:07.223 回答