0

関数外の変数のインポートがviews.pyで機能しないのはなぜですか? (ms_fields.pyは同フォルダ内のファイルです)

==== これは動作します: 変数 "MS_FIELDS" は適切にインポートされます =============

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response, RequestContext, get_object_or_404 

def current_quote(request):
    from .ms_fields import MS_FIELDS #import within the function
    return render_to_response('mis/current_quote.html', locals(), context_instance=RequestContext(request))

===これは機能しません: 「代入前にローカル変数 'MS_FIELDS' が参照されました」 =====

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response, RequestContext, get_object_or_404 
from .ms_fields import MS_FIELDS  # import at the beginning of the file

def current_quote(request):
    MS_FIELDS = MS_FIELDS 
    return render_to_response('mis/current_quote.html', locals(), context_instance=RequestContext(request))

何故ですか?インポート関数は、ファイル全体で変数を使用可能にするべきではありませんか?

どうもありがとう!

4

1 に答える 1

2

機能しないのはインポートではなく、割り当てです。関数内で MS_FIELDS に代入することにより、インポートからのグローバル名をオーバーライドするローカル変数であることを Python に伝えます。

とにかくなぜそんなことをするのか理解できません。MS_FIELDS をコンテキストに明示的に渡すだけです。使用locals()はハックであり、あまり良いものではありません。

于 2013-09-30T06:25:08.100 に答える