分叉模板 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', ],