Джанго Оскар изменить шаблон URL - PullRequest
0 голосов
/ 08 февраля 2019

Я настроил проект django-oscar и пытаюсь настроить URL-адреса.Моя цель - изменить /catalogue на /catalog.

Согласно документации, которую я добавил app.py в myproject/app.py

myproject / app.py

from django.conf.urls import url, include
from oscar import app


class MyShop(app.Shop):
    # Override get_urls method
    def get_urls(self):
        urlpatterns = [
            url(r'^catalog/', include(self.catalogue_app.urls)),
            # all the remaining URLs, removed for simplicity
            # ...
        ]
        return urlpatterns


application = MyShop()

myproject / urls.py

from django.conf.urls import url, include
from django.contrib import admin
from . import views
from .app import application

urlpatterns = [
    url(r'^i18n/', include('django.conf.urls.i18n')),

    url(r'^admin/', admin.site.urls),

    url(r'', application.urls),

    url(r'^index/$',views.index, name = 'index'),
]

Сервер проекта работает без ошибок, но когда я пытаюсь localhost:8000/catalog, я получаю

NoReverseMatch в / catalog / 'customer' не является зарегистрированным пространством имен.

Ожидаемое значение localhost:8000/catalog должно возвращать страницу каталога.

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Вы можете попробовать это

в app.py

from django.conf.urls import url, include
from oscar import app

class MyShop(app.Shop):
    # Override get_urls method
    def get_urls(self):
        urls = [
            url(r'^catalog/', include(self.catalogue_app.urls)),
            # all the remaining URLs, removed for simplicity
            # ...
        ]
        urls = urls + super(MyShop,self).get_urls()
        return urls


application = MyShop()

И в вашем urls.py вы можете просто добавить это

from myproject.app import application as shop

 url(r'', shop.urls),

Надеюсь, это поможетвы

0 голосов
/ 13 февраля 2019

Расширение на ответ c.grey , чтобы указать, как заменить вместо добавления URL -

from django.conf.urls import url, include
from oscar import app


class MyShop(app.Shop):
    def get_urls(self):
        urls = super(MyShop, self).get_urls()
        for index, u in enumerate(urls):
            if u.regex.pattern == r'^catalogue/':
                urls[index] = url(r'^catalog/', include(self.catalogue_app.urls))
                break
        return urls


application = MyShop()
0 голосов
/ 08 февраля 2019

Вы должны включить URL-адреса, а не ссылаться на них напрямую.

url(r'', include('application.urls')),
...