gpt4 book ai didi

python - Django-奥斯卡 : how to change the URL from root APP?

转载 作者:行者123 更新时间:2023-12-01 07:17:38 25 4
gpt4 key购买 nike

我正在使用 django-oscar 2.0.1 开发一个电子商务网站。

我想更改访问目录的网址(如文档中所述 here ),但我总是收到此错误:

**NoReverseMatch at / 'customer' is not a registered namespace.**.

我知道我不是唯一一个遇到此错误的人( Django Oscar change URL pattern ),但提出的解决方案是这篇文章对我不起作用(也许是因为 django-oscar 版本此时是 1.6.5 ?) .

所以,这是我基于 django-oscar documentation 遵循的步骤:

  • 我在 python venv 中使用 django-oscar 和所有依赖项创建了一个新项目。
  • 我 fork 了目录应用
python manage.py oscar_fork_app catalogue forkedApps
  • 编辑已安装的应用
    #'oscar.apps.catalogue',
'forkedApps.catalogue.apps.CatalogueConfig',
'oscar.apps.catalogue.reviews',

这是项目的结构:

project
> forkedApps
> catalogue
. __init__.py
. admin.py
. apps.py
. models.py
> project
. __init__.py
. settings.py
. urls.py
. wsgi.py
  • 我尝试将目录基本 URL 从/catalogue 更改为/cata:

fork 目录

    # forkedApps/catalogue/apps.py

import oscar.apps.catalogue.apps as apps
from oscar import config
from django.conf.urls import url

from django.views.generic.base import RedirectView
from django.urls import reverse_lazy

class CatalogueConfig(apps.CatalogueConfig):
name = 'forkedApps.catalogue'

class MyShop(config.Shop):

# Override get_urls method
def get_urls(self):
from django.contrib.auth import views as auth_views

from oscar.views.decorators import login_forbidden
urlpatterns = [
url(r'^cata/', self.catalogue_app.urls),
url(r'^$', RedirectView.as_view(url=reverse_lazy('catalogue:index')), name='home'),
url(r'^basket/', self.basket_app.urls),
#...all other urls
]
return urlpatterns

项目初始化

    #project/project/__init__.py

default_app_config = 'forkedApps.catalogue.apps.MyShop'

项目网址

    #project/project/urls.py

from django.apps import apps
from django.urls import include, path
from django.contrib import admin

urlpatterns = [
path('i18n/', include('django.conf.urls.i18n')),

path('admin/', admin.site.urls),
#path('', include(apps.get_app_config('oscar').urls[0])),
path('', include(apps.get_app_config('catalogue').urls[0])),
### Does catalogue refers to my forked catalogue ? ###
]

当我运行服务器时我收到此错误:

raise NoReverseMatch("%s is not a registered namespace" % key) django.urls.exceptions.NoReverseMatch: 'customer' is not a registered namespace

你知道我错过了什么吗?

解决方案:

我创建了一个名为“oscar_url”(任意名称)的应用,并将其添加到 INSTALLED_APPS

oscar_url初始化

    #project/oscar_url/__init__.py

default_app_config = 'oscar_url.apps.MyShop'

oscar_url 应用

    #project/oscar_url/apps.py
import oscar.config as apps
from django.views.generic.base import RedirectView
from django.urls import reverse_lazy
from django.conf.urls import url

class MyShop(apps.Shop):
name = 'oscar_url'

def get_urls(self):
from django.contrib.auth import views as auth_views

from oscar.views.decorators import login_forbidden
urlpatterns = [
url(r'^cata/', self.catalogue_app.urls),
url(r'^$', RedirectView.as_view(url=reverse_lazy('catalogue:index')), name='home'),
url(r'^basket/', self.basket_app.urls),
url(r'^checkout/', self.checkout_app.urls),
#all others urls...
]
return urlpatterns

我修改了项目网址:

项目网址

    #project/project/urls.py

urlpatterns = [
path('i18n/', include('django.conf.urls.i18n')),

path('admin/', admin.site.urls),

#path('', include(apps.get_app_config('oscar').urls[0])),
path('', include(apps.get_app_config('oscar_url').urls[0])),
]

最佳答案

这里有几件事:

  1. 您已经定义了一个 MyShop 类,但您没有在任何地方加载它。您需要将此应用包含在您的 INSTALLED_APPS 中。

    请注意,在这种情况下,将 MyShop 放在您的目录应用程序中可能没有意义 - 该商店应用程序适用于您的整个项目,而不仅仅是目录。

  2. 在您的项目网址中,您需要加载此新应用的配置而不是 Oscar 的配置:

    path('', include(apps.get_app_config('name_of_your_app').urls[0])),

    您在 MyShop 中设置 name = 'name_of_your_app' 的位置。

关于python - Django-奥斯卡 : how to change the URL from root APP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57869711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com