django 2.2.5 import url 从一个应用程序到另一个应用程序
django 2.2.5 import url from one app to another app
我想在搜索应用 url (search/urls.py) 中使用来自产品应用 (products/urls.py) 的 url 来搜索 items/products 使用搜索栏。我在 django docs but it's importing a view to url in the same app, and I've also attempted this example 上尝试过这个例子,但它看起来是旧版本 django 的解决方案,但我在 time time 2.2.5.
使用最新版本的 django
我在终端中收到的错误消息来自 search/urls.py:
path('', views.ProductListView.as_view(), name='list'),
AttributeError: module 'search.views' has no attribute
'ProductListView'
我知道 search.views 没有属性 "ProductListView" 但是 products.views 有,这就是为什么我要在 [=30= 中导入 products.views ].py.
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)
您有:
from products.views import ProductListView
因此您应该使用 ProductListView
,而不是 views.ProductListView
urlpatterns = [
path('', ProductListView.as_view(), name='list'),
...
]
请注意,您可以删除 from .import views
导入,除非您在 search/urls.py
中的其他地方使用 views
另一种方法是使用 import as,这样您就可以从同一模块中的不同应用导入多个 views.py
:
from products import views as product_views
urlpatterns = [
path('', product_views.ProductListView.as_view(), name='list'),
]
我想在搜索应用 url (search/urls.py) 中使用来自产品应用 (products/urls.py) 的 url 来搜索 items/products 使用搜索栏。我在 django docs but it's importing a view to url in the same app, and I've also attempted this example 上尝试过这个例子,但它看起来是旧版本 django 的解决方案,但我在 time time 2.2.5.
使用最新版本的 django我在终端中收到的错误消息来自 search/urls.py:
path('', views.ProductListView.as_view(), name='list'), AttributeError: module 'search.views' has no attribute 'ProductListView'
我知道 search.views 没有属性 "ProductListView" 但是 products.views 有,这就是为什么我要在 [=30= 中导入 products.views ].py.
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)
您有:
from products.views import ProductListView
因此您应该使用 ProductListView
,而不是 views.ProductListView
urlpatterns = [
path('', ProductListView.as_view(), name='list'),
...
]
请注意,您可以删除 from .import views
导入,除非您在 search/urls.py
views
另一种方法是使用 import as,这样您就可以从同一模块中的不同应用导入多个 views.py
:
from products import views as product_views
urlpatterns = [
path('', product_views.ProductListView.as_view(), name='list'),
]