Django 2.2.5 импорт URL из одного приложения в другое приложение - PullRequest
0 голосов
/ 20 сентября 2019

Я хотел бы использовать URL-адрес из приложения products (products / urls.py) внутри URL-адреса поискового приложения (search / urls.py) для поиска элементов / товаров с помощью панели поиска.Я попытался этот пример на django docs , но он импортирует представление в URL в том же приложении, и я также попытался этот пример , но это выглядит как решение дляболее старая версия django, но я использую последнюю версию django во время 2.2.5.

Сообщение об ошибке, которое я получаю в терминале, исходит от search / urls.py:

путь ('', views.ProductListView.as_view (), name = 'list'), AttributeError: модуль 'search.views' не имеет атрибута 'ProductListView'

Я понимаю search.viewsне имеет атрибута «ProductListView», но, как и в products.views, я пытаюсь импортировать products.views в search / urls.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)

1 Ответ

4 голосов
/ 20 сентября 2019

У вас есть:

from products.views import ProductListView

Поэтому вы должны использовать ProductListView, а не views.ProductListView

urlpatterns = [
    path('', ProductListView.as_view(), name='list'),
    ...
]

Обратите внимание, что вы можете удалить импорт from .import views, если вы не используете views где-то еще в search/urls.py

Альтернативой является использование импорта как, так что вы можете импортировать несколько views.py из разных приложений в одном модуле:

from products import views as product_views

urlpatterns = [
    path('', product_views.ProductListView.as_view(), name='list'),
]
...