我正在使用 Django CBV ,并对extra_context
类属性和get_context_data(**kwargs)
方法之间的差异感到困惑。尽管根据docs,您可以同时使用这两种方法,但是哪种方法更好?
有人可以帮助我解决问题吗???
我在DetailView
子类中使用了此类属性,并且可以正常工作。
Django 2.2版本。
谢谢。
我不知道您是否仍然对此有疑问,但是最近在生产环境中使用extract_context遇到了一个问题,特别是在使用Django 2.2和Python 3.6的AWS EC2实例上,我认为在extra_context上使用QuerySet将会像在开发环境中一样在生产环境中自动更新,但是如果您需要在上下文中进行QuerySet更新,则最好使用get_context_data。
如果需要固定值,则使用底线,否则请使用extra_context,否则请使用get_context_data。
,它们都具有相同的功能,只是在get_context_data
中要获取上一个数据,您应该调用super
并更新该字典;因为您不想在上下文中丢失上一个数据。
但是extra_context
将执行相同的操作,但无需调用super,您可以像TemplateView.as_view(extra_context={'title': 'Custom Title'})
这样在url中调用它。
总而言之,extra_context
只是速度更快,用更少的代码来更新CBV中的上下文数据。
同样要注释,extra_context
将用作属性,但是get_context_data
是CBV的方法。