【问题标题】:django 2.2.5 import url from one app to another appdjango 2.2.5 从一个应用程序导入 url 到另一个应用程序
【发布时间】:2019-09-20 15:42:50
【问题描述】:

我想在搜索应用程序 url (search/urls.py) 中使用产品应用程序 (products/urls.py) 的 url 来使用搜索栏搜索项目/产品。我在django docs 上尝试过这个示例,但它正在将视图导入到同一个应用程序中的 url,我也尝试过this example,但它看起来是旧版本 django 的解决方案,但我使用的是最新版本时间 2.2.5 时的 django 版本。

我在终端收到的错误消息来自 search/urls.py:

path('', views.ProductListView.as_view(), name='list'), AttributeError:模块“search.views”没有属性 '产品列表视图'

我知道 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'),

]

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)

【问题讨论】:

  • Alasdair 已向您展示了正确的导入,但您为什么要这样做? ProductListView 在 products/urls 中已经有一个 URL。为什么还要在搜索中使用它?
  • @ToanQuocHo from .views import * as views 无效。

标签: python django django-urls


【解决方案1】:

你有:

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'),
]

【讨论】:

  • 在 search/urls.py 中包含 app_name='search' 就成功了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-06
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多