我正在尝试将django-oscar商店添加到现有的django网站。
我的问题是两者的模板在某种程度上发生冲突,这样我既可以看到现有的网站,也可以看到商店,但不能同时看到两者。
这是最重要的urls.py:
from django.conf.urls import include, url
from django.contrib import admin
from oscar.app import application
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('main.urls')),
# oscar
url(r'^shop/', include(application.urls)),
]
在设置中:
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.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',
'main.context_processors.google_analytics'
],
'loaders': [
'django.template.loaders.app_directories.Loader',
'django.template.loaders.filesystem.Loader',
],
},
},
]
如果我更换装载机的订单,则无法再访问/查看原始网站(在应用程序'主要')或奥斯卡商店。因此,我不确定我忽略了什么深奥的细节,而且文档并不能涵盖这一点。欢呼声。
答案 0 :(得分:2)
您遇到的问题是您的模板名称与Oscar相冲突。奥斯卡拥有它自己的base.html
,如果你先列出那个加载器而不是你自己的base.html
,模板加载器会找到它。 Django将使用它找到的第一个。
这是一个known issue with Oscar - 很遗憾没有向后兼容的方法来解决它,所以它已经解决了一段时间。
改变奥斯卡的行为非常困难,所以我建议您尝试更改模板结构。具体来说,您应该命名所有应用模板。因此,如果您的应用被称为myapp
,请将基本模板放在myapp/templates/myapp/base.html
中。然后,您可以在其他模板中将其引用为{% extends 'myapp/base.html' %}
。同样地将所有其他模板放在templates/myapp/
。
这将确保您的模板不会与奥斯卡发生冲突,问题应该消失。