少し前に、Django で Python のプログラミングを始めました。ときどき奇妙なエラーが発生し、その理由がわかりません。それでは、これらのエラーの 1 つから始めましょう。
私は2つの機能を持つビューを持っています。例:
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 Exception が発生します。39行目はview関数のrender_to_responseであり、new関数ではありません。
では、新しい関数の呼び出しがビュー関数でエラーをスローするのはなぜですか? 本当に、私には手がかりがありません。私は C# からやってきたので、コーディングを間違ったものにする特別な Python ルールを取得していないと確信しています。
更新: stackoverflow.com コード パネルが原因で、2 つの関数のインデントが正しくありません。気にしないでください。