分叉模板 django-oscars 后,仪表板不会填充值
Dashboard doesn't populate values after forking template django-oscars
这是我的 view.py 仪表板-
from django.views.generic import TemplateView
class IndexView(TemplateView):
def get_template_names(self):
if self.request.user.is_staff:
return ['mytemplates/index.html']
else :
return ['dashboard/index_nonstaff.html','mytemplates/index.html']
所以我能够成功地分叉应用程序并扩展模板,但由于某种原因,仪表板上没有显示任何值
您定义了一个新的 IndexView
,它不继承 Oscar 的 IndexView
- 因此模板无法找到任何相关上下文。你目前拥有的只是一个普通的TemplateView
,与Oscar的完全没有关系。
假设您已经按照 fork the dashboard app 的说明进行操作,那么您需要继承 Oscar 的 IndexView
:
from oscar.apps.dashboard.views import IndexView as CoreIndexView
# Note - you subclass CoreIndexView, not TemplateView
class IndexView(CoreIndexView):
def get_template_names(self):
if self.request.user.is_staff:
return ['mytemplates/index.html']
else:
return ['dashboard/index_nonstaff.html','mytemplates/index.html']
请参阅 this bit of the documentation,其中解释了如何执行此操作。
就是说,如果您只想覆盖模板(而不是任何视图逻辑),那么实际上没有必要覆盖视图。只需覆盖 Oscar 的模板 as described here - 这样您就可以将模板 yourproject/templates/dashboard/index.html
添加到您的项目中,该模板将优先于 Oscar 的默认模板加载。
我正确地遵循了文档中的所有内容,终于找出了错误。在我的 settings.py 中,我将模板的路径放在 django-oscars 默认模板之前。
下面是正确的片段
TEMPLATES = [
'DIRS': [OSCAR_MAIN_TEMPLATE_DIR,
'path to/mytemplates', ],
这是我的 view.py 仪表板-
from django.views.generic import TemplateView
class IndexView(TemplateView):
def get_template_names(self):
if self.request.user.is_staff:
return ['mytemplates/index.html']
else :
return ['dashboard/index_nonstaff.html','mytemplates/index.html']
所以我能够成功地分叉应用程序并扩展模板,但由于某种原因,仪表板上没有显示任何值
您定义了一个新的 IndexView
,它不继承 Oscar 的 IndexView
- 因此模板无法找到任何相关上下文。你目前拥有的只是一个普通的TemplateView
,与Oscar的完全没有关系。
假设您已经按照 fork the dashboard app 的说明进行操作,那么您需要继承 Oscar 的 IndexView
:
from oscar.apps.dashboard.views import IndexView as CoreIndexView
# Note - you subclass CoreIndexView, not TemplateView
class IndexView(CoreIndexView):
def get_template_names(self):
if self.request.user.is_staff:
return ['mytemplates/index.html']
else:
return ['dashboard/index_nonstaff.html','mytemplates/index.html']
请参阅 this bit of the documentation,其中解释了如何执行此操作。
就是说,如果您只想覆盖模板(而不是任何视图逻辑),那么实际上没有必要覆盖视图。只需覆盖 Oscar 的模板 as described here - 这样您就可以将模板 yourproject/templates/dashboard/index.html
添加到您的项目中,该模板将优先于 Oscar 的默认模板加载。
我正确地遵循了文档中的所有内容,终于找出了错误。在我的 settings.py 中,我将模板的路径放在 django-oscars 默认模板之前。
下面是正确的片段
TEMPLATES = [
'DIRS': [OSCAR_MAIN_TEMPLATE_DIR,
'path to/mytemplates', ],