【发布时间】:2018-01-01 04:46:51
【问题描述】:
我目前正在构建一个基于 Django-Oscar 的 Django 电子商务网站。默认情况下,后者带有基本的 Bootstrap 主题和样式。
我把这些模板文件移到了
project_root/templates/oscar
据我了解,如果我要覆盖这些模板,它将覆盖位于 virtualenv 中的原始 Oscar 模板。
下一步是我下载了一个我想用于网站的不同主题。
特别是,我希望该主题存在于
project_root/templates/main_theme
问题是我似乎无法让 Django 从该目录中提取模板。如果我删除 project_root/templates/oscar,它似乎会重新使用默认的 Oscar 模板。
如果我将base.html 放入project_root/templates/ 并使其base.html 成为新主题的主文件,则会显示它。但是,我仍然想把它分解成更小的文件,让它们“活”在一个单独的目录中。我怎样才能做到这一点?有没有更谨慎的方法来解决这个问题?
以下是一些相关设置:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.flatpages',
'django.contrib.sites',
'compressor',
'widget_tweaks',
] + get_core_apps()
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates'),
OSCAR_MAIN_TEMPLATE_DIR,
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.template.context_processors.i18n',
'django.contrib.messages.context_processors.messages',
'oscar.apps.search.context_processors.search_form',
'oscar.apps.promotions.context_processors.promotions',
'oscar.apps.checkout.context_processors.checkout',
'oscar.apps.customer.notifications.context_processors.notifications',
'oscar.core.context_processors.metadata',
],
},
},
]
COMPRESS_ROOT = os.path.join(BASE_DIR, "static")
STATIC_URL = '/static/'
#STATIC_ROOT = os.path.join(BASE_DIR, "static")
#This should be commented out in Development
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
【问题讨论】:
-
你为什么不在模板内的 oscar 目录中进行更改?这就是您覆盖默认模板的方式
-
问题是它似乎对此没有反应。它仍然采用原始的奥斯卡模板。我尝试在
templates/oscar中创建一个基本的base.html,但仍然获得了默认样式。答案的另一部分是我这样做是出于组织原因。 -
在templates/oscar/templates中你会找到一个base.html,尝试删除该页面的所有内容并检查它是否被渲染
-
我没有
templates/oscar/templates。我有templates/oscar。 -
将
os.path.join(BASE_DIR, 'templates')更改为os.path.join(BASE_DIR, 'templates/oscar')会改变事情吗?OSCAR_MAIN_TEMPLATE_DIR包含 oscar 子目录,因此您可能也必须这样做。
标签: python django templates django-templates django-oscar