Django:如何扩展settings.py?

时间:2011-03-14 17:32:56

标签: django

这段代码是否正确?

from django.conf import settings
settings.TEMPLATE_CONTEXT_PROCESSORS += ['portal.context_processors.login_form_processor']

我想在项目设置字典中再添加一个值,仅适用于一个应用程序=)

4 个答案:

答案 0 :(得分:1)

您应导入本地设置模块

import settings
settings.TEMPLATE_CONTEXT_PROCESSORS += ['portal.context_processors.login_form_processor']

答案 1 :(得分:1)

您可以拥有“标准设置”,并可以在项目的settings.py中导入此设置,如何:

在您的标准设置上:

# settings_standard.py
TEMPLATE_CONTEXT_PROCESSORS = (
    'context_one',
    'context_two'
)

在您的项目设置上:

# project settings.py
import settings_standard.py

TEMPLATE_CONTEXT_PROCESSORS += (
    'context_three',
    'context_four'
)

在第二个TEMPLATE_CONTEXT_PROCESSORS上注意+ =。 :)

答案 2 :(得分:0)

这取决于您的TEMPLATE_CONTEXT_PROCESSORS是否已经是列表或元组。如果它是一个列表,那么它将起作用,如果它是一个元组,那么你将会遇到一个关于尝试将列表和元组组合在一起的错误。

你可以这样做,以确保它有效......

from django.conf import settings
tpl_ctx_prcs = list(settings.TEMPLATE_CONTEXT_PROCESSORS)
tpl_ctx_prcs.append('portal.context_processors.login_form_processor')
settings.TEMPLATE_CONTEXT_PROCESSORS = tuple(tpl_ctx_prcs)

但是,这实际上是否符合您的要求 - 即,添加该模板上下文处理器以使其实际调用取决于您在何时何地执行此操作。

您是否有任何理由不想将其添加到settings.py文件中?即使您只需要在单个应用程序中使用额外的上下文,也可以将它显示在您的其他应用程序中并非“糟糕”。

答案 3 :(得分:0)

这是我扩展django-rest-framework节流率的方法,因此我在开发和生产中可以具有不同的价值。

base.py

# Django rest framework
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
        #'rest_framework.authentication.BasicAuthentication',
        #'rest_framework.authentication.SessionAuthentication',
    ],
    'DEFAULT_THROTTLE_CLASSES': (
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle'
    ),
    'DEFAULT_THROTTLE_RATES': {
        'anon': '100/day',
        'user': '10/minute'
    },
}

production.py

from .base import *

REST_FRAMEWORK['DEFAULT_THROTTLE_RATES'] = {
    'anon': '1000/day',
    'user': '30/minute'
}