Python 函数未定义
Python function is not defined
我在 运行 服务器(FLASK 应用程序)时遇到函数未定义错误:
NameError: 名称 'format_date' 未定义
这是我目前所有的代码:
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。 : 不要评判我,我是菜鸟。
您正在尝试使用 class 上定义的 format_date
函数。您可以将它定义为一个独立的函数,或者简单地使用 Post class 上的方法。你需要稍微修改一下
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>
然而,这是假设你在你的 class 某处定义了 date
属性(在你现有的模板中你假设你这样做了,但我没有看到它在任何地方)。
我在 运行 服务器(FLASK 应用程序)时遇到函数未定义错误:
NameError: 名称 'format_date' 未定义
这是我目前所有的代码:
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。 : 不要评判我,我是菜鸟。
您正在尝试使用 class 上定义的 format_date
函数。您可以将它定义为一个独立的函数,或者简单地使用 Post class 上的方法。你需要稍微修改一下
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>
然而,这是假设你在你的 class 某处定义了 date
属性(在你现有的模板中你假设你这样做了,但我没有看到它在任何地方)。