在Django视图和全局变量中使用locals可以在模板中引用

时间:2016-01-12 03:56:59

标签: python django django-templates

我正在研究现有的代码库并看到了这段代码:

from constants import AppType
"""
AppType is a constant class in constants.py and it goes like
AppType:
    TypeA = 1
    TypeB = 2
"""
@log_request(log_response=False)
@user_profile_required
def app_home(request, user, user_profile):
    apps = db_manager.get_all_apps_for_user(
        user_profile.uid, user_profile.platform
    )
    return render(request, 'appinfo/all_apps.html', locals())
    # notice the use of locals here for convinience

all_apps.html

{% for val, name in app_types.items %}
{{val}}, {{name}}<br>
{% endfor %}

我在渲染时看到了这个回应:

1, TypeA
2, TypeB

根据我的理解(如果我错了,请纠正我),locals应该返回局部变量的字典。但很明显,视图函数中没有app_types

我怀疑有一些魔法将AppType翻译为app_types,并将TypeC = 3附加到AppType。然后我确实看到了3, TypeC被渲染出来。所以我的嫌疑人似乎是真的?

这里的诀窍是什么,或者我错过了一些其他信息来理解这个问题?

1 个答案:

答案 0 :(得分:0)

好吧,结果app_types的定义在context_processors.py中并加载到TEMPLATE_CONTEXT_PROCESSORS中的settings.py

所以这只是理解Django模板系统及其处理的问题