Pergunta

Eu estou usando django e eu tenho um models.admin.py arquivo chamado e eu quero fazer o seguinte idéia em models.py:

from "models.admin" import *

No entanto, eu recebo um erro de sintaxe por ter aspas duplas. Mas se eu só faço

from models.admin import *

então eu recebo "ImportError: No módulo chamado admin"

Existe alguma maneira de importação a partir de um arquivo de python que tem um período em seu nome?

Foi útil?

Solução

Na verdade, você pode importar um módulo com um nome inválido. Mas você vai precisar usar imp para que, por exemplo, assumindo arquivo é chamado models.admin.py, você poderia fazer

import imp
with open('models.admin.py', 'rb') as fp:
    models_admin = imp.load_module(
        'models_admin', fp, 'models.admin.py',
        ('.py', 'rb', imp.PY_SOURCE)
    )

Mas leia os documentos sobre imp.find_module e imp.load_module antes de começar a usá-lo.

Outras dicas

Se você realmente quiser, você pode importar um módulo com um nome de arquivo incomum (por exemplo, um nome de arquivo que contém um antes do '.py' '') usando o módulo imp:

>>> import imp
>>> a_b = imp.load_source('a.b', 'a.b.py')
>>> a_b.x
"I was defined in a.b.py!"

No entanto, isso é geralmente uma má idéia. É mais provável que você está tentando usar pacotes, caso em que você deve criar um diretório chamado "a", que contém um arquivo chamado "b.py"; e depois "a.b importação" irá carregar a / b.py.

O arquivo é chamado models/admin.py. ( Fonte )

Isto é, ele deve ser chamado admin.py em um diretório chamado models.

Em seguida, você pode importar usando from models.admin import *, assumindo que ele está em seu caminho Python.

Não, você não pode importar um arquivo de python como um módulo se o seu nome contém um período (ou um ponto de interrogação ou de exclamação marca, etc). O nome de um módulo python (não incluindo o .py) deve ser um nome python válidos (ou seja, pode ser usado como um nome de variável).

Você não está fazendo referência arquivos na declaração de importação, você está fazendo referência módulos e pacotes .

Por favor, leia a docs , eles são muito claro sobre esse assunto.

De qualquer forma, desde que você está usando Django, a abordagem usual não vai funcionar. Se você quiser manter modelos em arquivos separados, em vez de em models.py, você tem que tomar medidas adicionais, esboçado, por exemplo, aqui .

Edit:
Bem, eu realmente não sei o que significa a questioneer quando ele menciona admin e se é ou não está relacionado com a interface de administração do Django. Meus pontos ainda estão de pé.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top