Django上下文字典DRY

时间:2014-02-06 23:37:28

标签: python django django-views

所以我要预先说明我是Django和Python的新手...... 尽管如此,我正试图找出一种更好的方法来在我的视图中更新我的上下文字典。我有一些总是应该传递的DRY数据,以及特定于我所在视图的数据。有没有比使用dictionary.update更好的方法?再一次,我正在寻找一种更干的方法。

def get_searchdata():
    # helper function to populate search info
    spec_list = Speciality.objects.order_by('name')
    ins_list = Insurance.objects.order_by('name')
    dict_data = {'Specialties': spec_list,
                'Insurances' : ins_list}
    return dict_data



def individual(request, provider_id):
    context = RequestContext(request)
    doc = Provider.objects.get(id=provider_id)
    context_dict = {'Provider' : doc}
    context_dict.update(get_searchdata())
    return render_to_response('search/individual.html', context_dict, context)

1 个答案:

答案 0 :(得分:0)

如果您希望在整个网站的所有模板中都可以使用某些数据,则可以创建"context_processor"。这只是一个返回字典的函数。在使用RequestContext呈现任何视图时,该字典将添加到上下文中(因此可在模板中使用)。

在您的示例中,您将在具有单个功能的应用中创建模块:

def get_searchdata():
    spec_list = Speciality.objects.order_by('name')
    ins_list = Insurance.objects.order_by('name')
    dict_data = {'Specialties': spec_list,
            'Insurances' : ins_list}
    return dict_data

并将其添加到您的settings.py TEMPLATE_CONTEXT_PROCESSORS

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    "django.core.context_processors.tz",
    "django.contrib.messages.context_processors.messages",
    ...
    "myapp.mycontext_processors.get_searchdata"
)

现在,您可以在使用Specialties呈现的任何模板中访问该数据(InsuracesRequestContenxt)(例如,使用快捷方式{{1}呈现的任何视图})

相关问题