我想在搜索应用程序网址(search / urls.py)中使用产品应用程序(products / urls.py)中的网址,使用搜索栏搜索商品/产品。我在django docs上尝试过该示例,但是它正在导入视图以在同一应用程序中进行url,并且我也尝试过this example,但它似乎是django的较旧版本的解决方案,但我我在时间2.2.5使用django的最新版本。
我在终端收到的错误消息来自search / urls.py:
path('',views.ProductListView.as_view(),name ='list'), AttributeError:模块“ search.views”没有属性 “ ProductListView”
我了解search.views没有属性“ ProductListView”,但products.views却有,这就是为什么我要在search / urls.py中导入products.views的原因。
products / urls.py
from django.urls import path, re_path
from .import views
app_name = "products"
urlpatterns = [
path('', views.ProductListView.as_view(), name='list'),
re_path(r'^products/(?P<slug>[\w-]+)/$', views.ProductDetailSlugView.as_view(), name='detail'),
]
search / urls.py
from django.urls import path
from .import views
from products.views import ProductListView
urlpatterns = [
path('', views.ProductListView.as_view(), name='list'),
]
ecommerce / urls.py(主应用程序)
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include, re_path
# from products.views import ProductDetailView
from .views import home, about, contact
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name='home'),
path('about/', about, name='about'),
path('contact/', contact, name='contact'),
path('account/', include('allauth.urls'), name='login'),
path('register/', include('allauth.urls'), name='register'),
path('products/', include('products.urls', namespace='products')),
path('search/', include('search.urls', namespace='search')),
# path('', include('products.urls'), name='products-featured'),
# path('', include('products.urls'), name='featured-details'),
# path('', include('products.urls'), name='featured-slug-details'),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
答案 0 :(得分:4)
您有:
from products.views import ProductListView
因此,您应该使用ProductListView
,而不是views.ProductListView
urlpatterns = [
path('', ProductListView.as_view(), name='list'),
...
]
请注意,除非您在from .import views
的其他地方使用views
,否则可以删除search/urls.py
导入
一种替代方法是使用import as,以便您可以从同一模块中的不同应用程序导入多个views.py
:
from products import views as product_views
urlpatterns = [
path('', product_views.ProductListView.as_view(), name='list'),
]