这是我的view.py of dashboard -
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']
所以我成功地分叉了应用并扩展了模板,但由于某种原因,仪表板上没有显示任何值
答案 0 :(得分:3)
您已经定义了一个新的IndexView
,它不是Oscar' s IndexView
的子类 - 因此模板无法找到任何相关的上下文。你现在拥有的只是一个简单的TemplateView
,与奥斯卡没有任何关系。
假设您已按照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,其中说明了如何执行此操作。
也就是说,如果您要做的只是覆盖模板(而不是任何视图逻辑),那么实际上不需要覆盖视图。只需覆盖奥斯卡的模板as described here - 这样您就可以向项目添加模板yourproject/templates/dashboard/index.html
,该模板将优先加载到奥斯卡的默认模板中。
答案 1 :(得分:-1)
我正确地记录了文档中的所有内容,最终弄清楚了错误。在我的settings.py中,我在django-oscars默认模板之前将路径放到我的模板中。
以下是正确方法的片段
TEMPLATES = [
'DIRS': [OSCAR_MAIN_TEMPLATE_DIR,
'path to/mytemplates', ],