不久前,我开始使用 Django 编写 Python。有时我会遇到奇怪的错误并且不知道为什么。所以,让我们从这些错误之一开始。
我有一个具有两个功能的视图。例子:
def view_post(request, slug):
"""
Shows a single post
"""
posts = Post.objects(slug = slug).limit(1)
for items in posts:
post = items
cssClasses = css_class_converter({ _css_class_editable })
context = RequestContext(request)
return render_to_response("single.html", { 'post': post, 'class': cssClasses }, context)
def new_post(request):
'''
Opens a blank page for creating a new post
'''
post = Post()
cssClasses = css_class_converter({ _css_class_editable, _css_class_new })
context = RequestContext(request)
return render_to_response("single.html", {'post': post, 'new': True }, context)
然后用我的 URLconf 调用它们。调用 view_post 函数可以正常工作,没有错误。
urlpatterns = patterns('blog.views',
# Examples:
url(r'^$', views.index),
url(r'^(?P<slug>[^\.]+)', 'view_post', name='view_blog_post'),
url(r'^new/$', 'new_post', name='new_blog_post'),
...
但是调用 new_post 函数会在第 39 行"local variable 'post' referenced before assignment"的 UnboundLocalError 异常中运行。第 39 行是视图函数的 render_to_response,而不是新函数。
那么,为什么我对新函数的调用会在我的视图函数中引发错误?真的,我一点头绪都没有。我是从 C# 过来的,所以我确定我没有得到一些特殊的 Python 规则,这使我编码错误。
更新:由于 stackoverflow.com 代码面板,这两个函数的缩进不正确。别管它。