chr*_*ris 18 migration generics django views
希望将我的项目更新到最新版本的django,并发现通用视图已经发生了很大变化.查看文档,我看到他们将所有通用内容更改为基于类的视图.我理解大部分的用法,但是对于为视图返回大量对象时我需要做的事情很困惑.当前网址可能如下所示:
(r'^$', direct_to_template, { 'template': 'index.html', 'extra_context': { 'form': CodeAddForm, 'topStores': get_topStores, 'newsStories': get_dealStories, 'latestCodes': get_latestCode, 'tags':get_topTags, 'bios':get_bios}}, 'index'),
Run Code Online (Sandbox Code Playgroud)
如何将这样的内容转换为这些新视图?
Pyk*_*ler 30
通用视图迁移描述了基于类的视图替换了什么.根据文档,传递extra_context的唯一方法是继承TemplateView并提供自己的get_context_data方法.这里是我想出了允许DirectTemplateView类extra_context为与做direct_to_template.
from django.views.generic import TemplateView
class DirectTemplateView(TemplateView):
extra_context = None
def get_context_data(self, **kwargs):
context = super(self.__class__, self).get_context_data(**kwargs)
if self.extra_context is not None:
for key, value in self.extra_context.items():
if callable(value):
context[key] = value()
else:
context[key] = value
return context
Run Code Online (Sandbox Code Playgroud)
使用此类,您将替换:
(r'^$', direct_to_template, { 'template': 'index.html', 'extra_context': {
'form': CodeAddForm,
'topStores': get_topStores,
'newsStories': get_dealStories,
'latestCodes': get_latestCode,
'tags':get_topTags,
'bios':get_bios
}}, 'index'),
Run Code Online (Sandbox Code Playgroud)
有:
(r'^$', DirectTemplateView.as_view(template_name='index.html', extra_context={
'form': CodeAddForm,
'topStores': get_topStores,
'newsStories': get_dealStories,
'latestCodes': get_latestCode,
'tags':get_topTags,
'bios':get_bios
}), 'index'),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11790 次 |
| 最近记录: |