How to disable an app or feature

How to disable an app’s URLs

Suppose you don’t want to use Oscar’s dashboard but use your own. The way to do this is to modify the URLs config to exclude the URLs from the app in question.

You need to use your own root ‘application’ instance which gives you control over the URLs structure. So your root urls.py should have:

# urls.py
from myproject.app import application

urlpatterns = [
    ...
    url(r'', include(application.urls)),
]

where application is a subclass of oscar.app.Shop which overrides the link to the dashboard app:

# myproject/app.py
from oscar.app import Shop
from oscar.core.application import Application

class MyShop(Shop):

    # Override the core dashboard_app instance to use a blank application
    # instance.  This means no dashboard URLs are included.
    dashboard_app = Application()

The only remaining task is to ensure your templates don’t reference any dashboard URLs.

How to disable Oscar feature

You can add feature name to the setting OSCAR_HIDDEN_FEATURES and its application URLs would be excluded from the URLconf. Template code, wrapped with the {% iffeature %}{% endiffeature %} block template tag, will not be rendered:

{% iffeature "reviews" %}
    {% include "catalogue/reviews/partials/review_stars.html" %}
{% endiffeature %}

Currently supported “reviews” and “wishlists” features. You can make your custom feature hidable by setting hidable_feature_name property of the Application class:

# myproject/apps/lottery/app.py
from oscar.core.application import Application

class LotterApplication(Application):
    hidable_feature_name = 'lottery'

Then, it needs to be added to the corresponding setting: OSCAR_HIDDEN_FEATURES = ['lottery']. Finally, you can wrap necessary template code with the {% iffeature "lottery" %}{% endiffeature %} tag as in the example above.