python - django 2.2.5 从一个应用程序导入 url 到另一个应用程序
问题描述
我想在搜索应用程序 url (search/urls.py) 中使用产品应用程序 (products/urls.py) 的 url 来使用搜索栏搜索项目/产品。我已经在django docs上尝试了这个示例,但它正在将视图导入到同一个应用程序中的 url,我也尝试过这个示例,但它看起来是旧版本 django 的解决方案,但我使用的是最新版本django 在时间 2.2.5。
我在终端收到的错误消息来自 search/urls.py:
path('', views.ProductListView.as_view(), name='list'), AttributeError: module 'search.views' has no attribute 'ProductListView'
我知道 search.views 没有属性“ProductListView”,但是 products.views 有,这就是我尝试在 search/urls.py 中导入 products.views 的原因。
产品/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'),
]
搜索/urls.py
from django.urls import path
from .import views
from products.views import ProductListView
urlpatterns = [
path('', views.ProductListView.as_view(), name='list'),
]
电子商务/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
导入,除非您在views
其他地方使用search/urls.py
另一种方法是使用 import as,以便您可以views.py
从同一模块中的不同应用程序导入多个:
from products import views as product_views
urlpatterns = [
path('', product_views.ProductListView.as_view(), name='list'),
]
推荐阅读
- javascript - 迭代大量对象是更改/添加值的“正确方法”吗?
- python - 对数据库执行生成的密码
- linux - 如何将来自vim的unix命令与在拆分窗口中打开的所有文件相关联?
- amazon-web-services - AWS CloudFormation:默认 VPC“vpc”中不存在安全组“sg-”
- python - 熊猫:列中的行
- python - 每次我运行代码时,Cnn + word2vec 模型都会不断改变准确性
- tensorflow - 如何在给定时间内睡觉和唤醒谷歌珊瑚开发板
- python-3.x - 如何在 KivyMD 中添加启动画面
- c++ - 有没有办法用 C 宏在两个列表上做笛卡尔积?
- javascript - 在反应中加载three.js纹理作为base64字符串