ImageFieldだけでテスト用のモデルがあります。これのImageFieldは、次のようなFileSystemStorageにバインドされていますDjangoはFileSystemStorageから返されるURLをどのように構築しますか?
fs_test = FileSystemStorage(location = settings.FS_TEST_FILES,
base_url = settings.FS_TEST_URL)
class TestModel(models.Model):
image = models.ImageField(storage=fs_test,upload_to='image')
の設定は次のようになります。
FS_TEST_FILES = os.path.normpath(MEDIA_ROOT+'/fs_test')
FS_TEST_URL = os.path.normpath(MEDIA_URL+'/fs_test/')
アップロード、ファイルを「メディア/ルート/ fs_test /画像/ファイル名がアップロードされます。 png "と表示されます。ここまで心配はありません。しかし、 "image.url"を呼び出すと、 "media/url/image/filename.png"が表示されます。これはbase_url + filenameでなければなりません。この場合、 "media/url/fs-test/image/filename.png"になりますか?何故なの?
編集: これ以上の情報はありません。
def _get_url(self):
self._require_file()
return self.storage.url(self.name)
url = property(_get_url)
をし、ストレージクラスが定義されています:次のようにDjangos FileFieldにクラスは、URLへのアクセスを定義し
def url(self, name):
if self.base_url is None:
raise ValueError("This file is not accessible via a URL.")
return urlparse.urljoin(self.base_url, name).replace('\\', '/')
が、私のコードは標準MEDIA_URL、ないfs_testで定義されたBASE_URLを返します。