所以我要预先说明我是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)
答案 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
呈现的任何模板中访问该数据(Insuraces
和RequestContenxt
)(例如,使用快捷方式{{1}呈现的任何视图})