django上下文处理器 - 如何从一个函数返回所有内容?

时间:2014-09-12 00:29:27

标签: python django

我在我的django测试项目中添加了许多上下文处理器,认为添加很多上下文处理器会没问题。

但是我被告知我有太多,并且每个上下文处理器都是"呼叫"并且每个单独的上下文处理器将减慢我的测试项目。这是真的,b / c我的测试现在非常慢。

我被告知我可以将许多相关的上下文处理器组合为一个,从而消除了对一个上下文处理器的许多调用。

但我不确定该怎么做。

如何从单个字典中的一个函数返回所有内容,然后在模板上显示所需的值?

这是我的common.py文件,其中我声明了订阅价格&上下文处理器:

SUBSCRIPTION_PRICE_FREE = 0
SUBSCRIPTION_PRICE_03MONTHS = 40
SUBSCRIPTION_PRICE_06MONTHS = 60
SUBSCRIPTION_PRICE_12MONTHS = 99

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    ....
    'globalx.core.context_processors.get_subscription_price_free_user',
    'globalx.core.context_processors.get_subscription_price_03Month_user',
    'globalx.core.context_processors.get_subscription_price_06Month_user',
    'globalx.core.context_processors.get_subscription_price_12Month_user',
    'globalx.core.context_processors.get_subscription_price_default',
    ....
}

以下是我的context_processors.py文件的一部分:

....
def get_subscription_price_free_user(request):
    return {'subscription_price_free_user': settings.SUBSCRIPTION_PRICE_FREE}

def get_subscription_price_03Month_user(request):
    return {'subscription_price_03Month_user':
        settings.SUBSCRIPTION_PRICE_03MONTHS}

def get_subscription_price_06Month_user(request):
    return {'subscription_price_06Month_user':
        settings.SUBSCRIPTION_PRICE_06MONTHS}

def get_subscription_price_12Month_user(request):
    return {'subscription_price_12Month_user':
        settings.SUBSCRIPTION_PRICE_12MONTHS}

def get_subscription_price_default(request):
    return {'subscription_price_default': settings.SUBSCRIPTION_PRICE_DEFAULT}
....

以下是我在模板中显示值的方法:

{{ subscription_price_free_user }}
{{ subscription_price_03Month_user }}
{{ subscription_price_06Month_user }}
{{ subscription_price_12Month_user }}
{{ subscription_price_default }}

1 个答案:

答案 0 :(得分:1)

DOH!

答案是如此简单明了,我认为这看起来很困难。

这是我的common.py文件,其中我声明了订阅价格&上下文处理器:

SUBSCRIPTION_PRICE_FREE = 0
SUBSCRIPTION_PRICE_03MONTHS = 40
SUBSCRIPTION_PRICE_06MONTHS = 60
SUBSCRIPTION_PRICE_12MONTHS = 99

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    ....
    'globalx.core.context_processors.get_subscription_prices',
    ....

}

这是我的context_processor.py文件:

def get_subscription_prices(request):
    return {'subscription_price_free_user': settings.SUBSCRIPTION_PRICE_FREE,
            'subscription_price_03Month_user': settings.SUBSCRIPTION_PRICE_03MONTHS,
            'subscription_price_06Month_user': settings.SUBSCRIPTION_PRICE_06MONTHS,
            'subscription_price_12Month_user': settings.SUBSCRIPTION_PRICE_12MONTHS,
            'subscription_price_default': settings.SUBSCRIPTION_PRICE_DEFAULT}

这就是我调用模板中的值的方法:

{{ subscription_price_free_user }}
{{ subscription_price_03Month_user }}
{{ subscription_price_06Month_user }}
{{ subscription_price_12Month_user }}
{{ subscription_price_default }}

我希望这有助于其他人。