我无法理解基于类的视图,所以我试图通过一个例子来解决它 . 这是我到目前为止:
#urls.py
url(r'^(?P<langcode>[a-zA-Z-]+/about/$', about, name='about')
#views.py
def about(request, langcode):
languages = Language.objects.values_list('code', flat=True)
language = get_object_or_404(Language, pk=langcode)
return render(request, 'about.html', {
'languages': languages,
'language': language
})
我还有一些其他功能视图,包含 about
的前两行:
languages = Language.objects.values_list('code', flat=True)
language = get_object_or_404(Language, pk=langcode)
所以,我现在想做的是:
-
创建一个
class BaseView
(或者你想调用它),它扩展了django.generic.views
的某些内容,它将根据langcode
输入参数确定上下文的language
和languages
参数 -
创建
class AboutView(BaseView)
(因此扩展BaseView
),它将以某种方式定义要用于渲染的模板名称about.html
. -
我将进一步有另一个基于类的视图,也是为了扩展
BaseView
,它与AboutView
相似,但是它还根据langcode
输入参数设置了一个名为region
的上下文参数 .
有人能告诉我如何编码这些东西吗?谢谢
1 回答
这是实现您想要的简单方法:
首先使用TemplateView通用视图定义公共逻辑:
然后,您甚至不需要AboutView,因为您只想控制template_name,所以在您的urls.py中:
最后,对于使用
region
的另一个视图,您可以从MyBaseView继承,并添加您想要的上下文:希望有所帮助!