- Web Development with Django Cookbook(Second Edition)
- Aidas Bendoraitis
- 296字
- 2021-07-23 14:32:00
Defining overwritable app settings
This recipe will show you how to define settings for your app that can be then overwritten in your project's settings.py
or local_settings.py
file. This is useful especially for reusable apps.
Getting ready
Either create your Django app manually or using the following command:
(myproject_env)$ django-admin.py startapp myapp1
How to do it…
If you just have one or two settings, you can use the following pattern in your models.py
file. If the settings are extensive and you want to have them organized better, create an app_settings.py
file in the app and put the settings in the following way:
# models.py or app_settings.py
# -*- coding: UTF-8 -*-
from __future__ import unicode_literals
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
SETTING1 = getattr(settings, "MYAPP1_SETTING1", u"default value")
MEANING_OF_LIFE = getattr(settings, "MYAPP1_MEANING_OF_LIFE", 42)
STATUS_CHOICES = getattr(settings, "MYAPP1_STATUS_CHOICES", (
("draft", _("Draft")),
("published", _("Published")),
("not_listed", _("Not Listed")),
))
Then, you can use the app settings in models.py
, as follows:
# models.py
# -*- coding: UTF-8 -*-
from __future__ import unicode_literals
from django.db import models
from django.utils.translation import ugettext_lazy as _
from .app_settings import STATUS_CHOICES
class NewsArticle(models.Model):
# …
status = models.CharField(_("Status"),
max_length=20, choices=STATUS_CHOICES
)
If you want to overwrite the STATUS_CHOICES
setting for just one project, you simply open settings.py
and add the following:
# settings.py
# …
from django.utils.translation import ugettext_lazy as _
MYAPP1_STATUS_CHOICES = (
("imported", _("Imported")),
("draft", _("Draft")),
("published", _("Published")),
("not_listed", _("Not Listed")),
("expired", _("Expired")),
)
How it works…
The getattr(object, attribute_name[, default_value])
Python function tries to get the attribute_name
attribute from object and returns default_value
if it is not found. In this case, different settings are tried in order to be taken from the Django project settings module, and if they are not found, the default values are assigned.
- Objective-C Memory Management Essentials
- 數(shù)據(jù)庫原理及應(yīng)用(Access版)第3版
- Learning ArcGIS Pro 2
- FLL+WRO樂高機器人競賽教程:機械、巡線與PID
- 青少年P(guān)ython編程入門
- Python機器學(xué)習(xí)算法與實戰(zhàn)
- Kotlin從基礎(chǔ)到實戰(zhàn)
- Python之光:Python編程入門與實戰(zhàn)
- 軟件體系結(jié)構(gòu)
- QPanda量子計算編程
- Hands-On Robotics Programming with C++
- 零基礎(chǔ)學(xué)C++(升級版)
- Mastering ASP.NET Core 2.0
- H5頁面設(shè)計與制作(全彩慕課版·第2版)
- Game Development Patterns and Best Practices