NautobotAppConfig - Nautobot Documentation

Skip to content

# NautobotAppConfig

The `NautobotAppConfig` class is a Nautobot-specific wrapper around Django's built-in `AppConfig` class. It is used to declare Nautobot app functionality within a Python package. Each app should provide its own subclass, defining its name, metadata, and default and required configuration parameters. An example is below:

    from nautobot.apps import NautobotAppConfig

    class AnimalSoundsConfig(NautobotAppConfig):
        name = 'nautobot_animal_sounds'
        verbose_name = 'Animal Sounds'
        description = 'An example app for development purposes'
        version = '0.1'
        author = 'Bob Jones'
        author_email = 'bob@example.com'
        base_url = 'animal-sounds'
        required_settings = []
        default_settings = {
            'loud': False
        }

    config = AnimalSoundsConfig

Nautobot looks for the `config` variable within an app's `__init__.py` to load its configuration. Typically, this will be set to the `NautobotAppConfig` subclass, but you may wish to dynamically generate a `NautobotAppConfig` class based on environment variables or other factors.

## Required NautobotAppConfig Attributes

Name | Description
--- | ---
`author` | Name of app's author
`author_email` | Author's public email address
`description` | Brief description of the app's purpose
`name` | Raw app name; same as the app's source directory
`verbose_name` | Human-friendly name for the app
`version` | Current release (semantic versioning is encouraged)

## Optional NautobotAppConfig Attributes

Name | Default | Description
--- | --- | ---
`base_url` | Same as specified `name` | Base path to use for app URLs
`config_view_name` | `None` | URL name for a "configuration" view defined by this app
`default_settings` | `{}` | A dictionary of configuration parameters and their default values
`home_view_name` | `None` | URL name for a "home" or "dashboard" view defined by this app
`docs_view_name` | `None` | URL name for a "documentation" view defined by this app
`installed_apps` | `[]` | A list of additional Django application dependencies to automatically enable when the app is activated (you must still make sure these underlying dependent libraries are installed)
`max_version` | `None` | Maximum version of Nautobot with which the app is compatible
`middleware` | `[]` | A list of middleware classes to append after Nautobot's built-in middleware
`min_version` | `None` | Minimum version of Nautobot with which the app is compatible
`provides_dynamic_jobs` | `False` | Set to `True` if the app's job code should be reloaded every time a job is run. This is an advanced feature to support dynamically created Python classes
`required_settings` | `[]` | A list of any configuration parameters that must be defined by the user
`searchable_models` | `[]` | A list of model names to include in the global Nautobot search
`constance_config` | `{}` | Django Constance configuration parameters for settings.

Added in version 2.4.11

Support for the `provides_dynamic_jobs` attribute was added.

Added in version 2.0.0

Support for the `searchable_models` and `constance_config` attributes were added.

Removed in version 2.0.0

Support for `caching_config` was removed with the removal of `django-cacheops`.

Note

All `required_settings` must be configured in `PLUGINS_CONFIG` in `nautobot_config.py` before the app can be used.

Warning

If a configuration parameter is listed in either of `required_settings` or `constance_config`, and also in `default_settings`, the default setting will be ignored.

## NautobotAppConfig Code Location Attributes

The following `NautobotAppConfig` attributes can be configured to customize where Nautobot will look to locate various pieces of app code. In most cases you will not need to change these, but they are provided as options in case your app has a non-standard organizational structure.

Info

As used below, a "dotted path" is the combination of a Python module path within the app and the name of a variable within that module. For example, `"template_content.template_extensions"` refers to a variable named `template_extensions` inside a `template_content` module located at the root of the app.

Name | Default | Description
--- | --- | ---
`banner_function` | `"banner.banner"` | Dotted path to a function that can render a custom banner
`custom_validators` | `"custom_validators.custom_validators"` | Dotted path to a list of custom validator classes
`datasource_contents` | `"datasources.datasource_contents"` | Dotted path to a list of datasource (Git, etc.) content types to register
`graphql_types` | `graphql.types.graphql_types` | Dotted path to a list of GraphQL type classes
`homepage_layout` | `"homepage.layout"` | Dotted path to a list of home page items provided by the app
`jinja_filters` | `"jinja_filters"` | Path to a module that contains Jinja2 filters to be registered
`jobs` | `"jobs.jobs"` | Dotted path to a list of Job classes
`menu_items` | `"navigation.menu_items"` | Dotted path to a list of navigation menu items provided by the app
`secrets_providers` | `"secrets.secrets_providers"` | Dotted path to a list of secrets providers in the app
`template_extensions` | `"template_content.template_extensions"` | Dotted path to a list of template extension classes