Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the purpose of apps.py in Django 1.9?

Tags:

django

People also ask

What should be an app in Django?

A Django app is a small library representing a discrete part of a larger project. For example, our blog web application might have an app for posts , one for static pages like an About page called pages , and another app called payments to charge logged-in subscribers.

What is the difference between a Django project vs an app?

A project refers to the entire application and all its parts. An app refers to a submodule of the project. It's self-sufficient and not intertwined with the other apps in the project such that, in theory, you could pick it up and plop it down into another project without any modification.


Purpose of apps.py file:

This file is created to help the user include any application configuration for the app. Using this, you can configure some of the attributes of the application.

From Application Configuration documentation:

Application configuration objects store metadata for an application. Some attributes can be configured in AppConfig subclasses. Others are set by Django and read-only.

Example from the docs:

Lets say you’re creating a pluggable app called "Rock ’n’ roll", then to provide a proper name for the admin we can do the following:

In rock_n_roll app, we create a RockNRollConfig AppConfig class.

#rock_n_roll/apps.py
from django.apps import AppConfig

class RockNRollConfig(AppConfig): # Our app config class
    name = 'rock_n_roll'
    verbose_name = "Rock ’n’ roll"

We can make your application load this AppConfig subclass by default by specifying the default_app_config in the rock_n_roll/__init__.py file.

# rock_n_roll/__init__.py    
default_app_config = 'rock_n_roll.apps.RockNRollConfig'

Doing this will cause RockNRollConfig to be used when INSTALLED_APPS just contains 'rock_n_roll'. This allows us to make use of AppConfig features without requiring our users to update their INSTALLED_APPS setting.


It is the recommended place to put your application configuration. This feature has been here since 1.7, but to promote its use and enable easier configuration, the apps.py file has been added to the default app template.