Django Oscar 改变 URL 模式
Django Oscar change URL pattern
我已经设置了一个 django-oscar 项目,我正在尝试配置 URL。我的目标是将 /catalogue
更改为 /catalog
。
根据文档,我在 myproject/app.py
中添加了 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 at /catalog/ 'customer' is not a registered namespace.
预期输出 localhost:8000/catalog
应该 return 目录页。
您需要包含网址,而不是直接引用它们。
url(r'', include('application.urls')),
你可以试试这个
在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),
希望对你有所帮助
扩展 以指定如何 替换 而不是添加 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()
我已经设置了一个 django-oscar 项目,我正在尝试配置 URL。我的目标是将 /catalogue
更改为 /catalog
。
根据文档,我在 myproject/app.py
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 at /catalog/ 'customer' is not a registered namespace.
预期输出 localhost:8000/catalog
应该 return 目录页。
您需要包含网址,而不是直接引用它们。
url(r'', include('application.urls')),
你可以试试这个
在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),
希望对你有所帮助
扩展
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()