如果应用程序中没有在settings.py中定义默认设置,那么djangonautic处理默认设置的方式是什么?

我目前已经在应用程序中放置了一个default_settings文件,我已经考虑了几个选项.我倾向于第一种 Select ,但是使用globals()可能会有一些我没有意识到的trap

我经常看到应用程序在使用该设置的文件顶部使用FOO = getattr(settings, 'FOO', False),但我认为如果值/名称太长,这种方法会出现可读性/重复性问题.


1: Place settings in a function and iterate over locals / set globals

def setup_defaults():
    FOO = 'bar'
    for key, value in locals().items():
        globals()[key] = getattr(settings, key, value)

setup_defaults()

赞成的意见:

  • 只需写一次var名称,即可从Django设置中拉出同名的默认值.

缺点:

  • 不习惯使用GLOBAL(),也不知道有什么含义

2: Write 100 every call

赞成的意见: - Very clear.

缺点: - Repetitive


3: Always define settings as 100

赞成的意见: - Defaults are always overridden

缺点:

  • 重复(必须定义两次变量——一次以字符串形式,一次以变量形式)
  • 设置的可读性较差,因为它现在是第三个参数

4: Create utility function to 100

赞成的意见:

  • 易于理解的
  • 无需重复设置的字符串表示形式

缺点:

  • 不得不说

5: Create a settings class

class Settings(object):
    FOO = 'bar'

    def __init__(self):
         # filter out the startswith('__') of 
         # self.__dict__.items() / compare to django.conf.settings?

my_settings = Settings()

缺点:

  • 不能从foo.bar.my_settings导入foo(实际上,这是一个可怕的交易 destruct 者!)

我很想听听反馈意见.

推荐答案

我认为在你的应用程序包中创建settings.py是很常见的,你可以这样定义你的设置:

from django.conf import settings
FOO = getattr(settings, 'FOO', "default_value")

在应用程序中,您可以从应用程序的settings模块导入它们:

from myapp.settings import *

def print_foo():
    print FOO

但是我想每个人都同意Django在这方面缺乏更好的通用架构!如果您正在寻找一种更复杂的方法来处理这一问题,有一些第三方应用程序可以实现这一点,比如django-appconf,但是您自己决定是否为您的应用程序再引入一个依赖项!

为2020年更新

settings.py中,将settings.*放在属性之前.

from django.conf import settings
settings.FOO = getattr(settings, 'FOO', "default_value")

Django相关问答推荐

Django的update_or_create失败,尽管指定了kwargs'

其中实际的数据库提取在DRF list()中完成

POST_SAVE接缝有错误

在Django中使用Generil.ListView类时,分页不起作用

Django Rest Framework 速率限制动态基于用户类型

Django 仅预取相关模型的最新对象

基于模型多选字段在模板django中显示结果

如何让两个模型相互引用 Django

django 用一个提交按钮提交两种不同的表单

如何在django中生成临时文件然后销毁

CherryPy 与 Django

Django ORM 能否以可靠的与后端无关的方式存储无符号 64 位整数(又名 ulong64 或 uint64)?

如何从 Django 的 TabularInline 管理视图中省略对象名称?

django过滤器超过几天?

Django - 一起为 2 个或更多字段创建唯一的数据库约束

Django:AppRegistryNotReady()

如何动态访问 Django 模型字段详细名称?

如何将本地文件分配给 Django 中的 FileField?

过滤查询参数

Django 在 css 文件中使用背景图像的方法