姜戈奥斯卡更改URL模式



我已经设置了一个django-oscar项目,我正在尝试配置URL。我的目标是将/catalogue更改为/catalog

根据我在myproject/app.py中添加app.py的文档

我的项目/应用程序.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()

我的项目/网址.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 at/catalog/'customer' 不是已注册的命名空间。

预期的输出是localhost:8000/catalog应返回目录页面。

你可以试试这个

在 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),

希望对您有所帮助

扩展 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()

您需要包含 URL,而不是直接引用它们。

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

最新更新