Python函数未定义

时间:2016-03-02 16:34:00

标签: python class oop python-3.x jinja2

当我运行服务器(FLASK应用程序)时,我面临一个函数未定义错误:

NameError:name' format_date'未定义 enter image description here

到目前为止,这是我的所有代码:

from flask import Flask, render_template
import markdown
import os
from werkzeug import cached_property
import yaml

POSTS_FILE_EXTENSION = '.md'
app = Flask(__name__)

class Post(object):
    def __init__(self,path):
        self.path=path
        self._initialize_metadata()

    @cached_property
    def html(self):
        with open(self.path, 'r') as fin:
            content= fin.read().split('\n\n',1)[1].strip()
        return markdown.markdown(content)

    def _initialize_metadata(self):
        content = ''
        with open(self.path, 'r') as fin:
            for line in fin:
                if not line.strip():
                    break
                content +=line
        self.__dict__.update(yaml.load(content))

    def format_date(value, format='%B %d, %Y'):
        return value.strftime(format)

@app.route('/')
def index():
    return 'Hello, world!'

@app.route('/blog/<path:path>')
def post(path):
    #import ipdb; ipdb.set_trace()
    path = os.path.join('posts', path+'.md')
    post = Post(path)
    return render_template('post.html', post=post, format_date=format_date)


if __name__ == '__main__':
    app.run(port=8000, debug=True)

为什么说未定义?我定义了它。 :|

post.html:

<h3 id='date'>{{format_date(post.date)}}</h3>

hello.md:

title: Hello, worldtitle!
date: 2013-03-25

# Hello WOrld

### This is an H3 level header

P.S。 :不要评判我,我是个菜鸟。

1 个答案:

答案 0 :(得分:2)

您正在尝试使用该类中定义的format_date函数。您可以将其定义为独立函数,也可以只使用Post类上的方法。您需要稍微修改一下

class Post(object):
    def __init__(self,path):
        ...

    def format_date(self, format='%B %d, %Y'):
        return self.date.strftime(format)

在渲染模板时:

 return render_template('post.html', post=post)

然后你不需要传递函数名,而只需要调用

<h3 id='date'>{{post.format_date()}}</h3>

但是,这假设您在某个地方定义了date属性(在您假设的现有模板中,但我没有在任何地方看到它)。