Saltar al contenido

Obtener la ruta absoluta de la aplicación django

Solución:

Los módulos de Python (incluidas las aplicaciones de Django) tienen una __file__ atributo que le dice la ubicación de su __init__.py archivo en el sistema de archivos, por lo que

import appname
pth = os.path.dirname(appname.__file__)

debe hacer lo que quiera.

En circunstancias habituales, os.path.absname(appname.__path__[0]), pero es posible que las aplicaciones cambien eso si quieren importar archivos de una manera extraña.

(Yo siempre lo hago PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) en mi settings.py, sin embargo, facilita las diversas configuraciones que deben ser rutas absolutas).

Normalmente, esto es lo que agrego en mi archivo settings.py para poder hacer referencia a la raíz del proyecto.

import os.path

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))

Este método obtendrá el directorio de cualquier archivo de Python.

Entonces, la respuesta aceptada generalmente funciona bien. Sin embargo, para

  • paquetes de espacio de nombres con múltiples rutas, o

  • aplicaciones que configuran explícitamente sus rutas en la configuración,

su camino previsto puede no estar de acuerdo con el __file__ atributo del módulo.

Django (1.7+) proporciona la AppConfig.path atributo, que creo que es más claro incluso en casos simples, y que también cubre estos casos extremos.

Los documentos de la aplicación le dicen cómo obtener el objeto AppConfig. Entonces, para obtener AppConfig e imprimir la ruta desde él:

from django.apps import apps
print(apps.get_app_config('app_label').path)

Editar: ejemplo modificado de cómo usar get_app_config para eliminar puntos, lo que parece haber sido confuso. Aquí están los documentos como referencia.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *