如何将django-oscar与其他应用程序一起使用?

时间:2017-10-30 11:35:50

标签: django django-oscar

我正在尝试将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',
            ],
        },
    },
]

如果我更换装载机的订单,则无法再访问/查看原始网站(在应用程序'主要')或奥斯卡商店。因此,我不确定我忽略了什么深奥的细节,而且文档并不能涵盖这一点。欢呼声。

1 个答案:

答案 0 :(得分:2)

您遇到的问题是您的模板名称与Oscar相冲突。奥斯卡拥有它自己的base.html,如果你先列出那个加载器而不是你自己的base.html,模板加载器会找到它。 Django将使用它找到的第一个。

这是一个known issue with Oscar - 很遗憾没有向后兼容的方法来解决它,所以它已经解决了一段时间。

改变奥斯卡的行为非常困难,所以我建议您尝试更改模板结构。具体来说,您应该命名所有应用模板。因此,如果您的应用被称为myapp,请将基本模板放在myapp/templates/myapp/base.html中。然后,您可以在其他模板中将其引用为{% extends 'myapp/base.html' %}。同样地将所有其他模板放在templates/myapp/

这将确保您的模板不会与奥斯卡发生冲突,问题应该消失。