Я работаю над некоторыми перенаправлениями для нескольких URL-путей.
Мне пришлось переместить несколько моих путей в другое приложение.
У меня возникла проблема, вызывающаяимя шаблона для ссылки на другой URL в моем RedirectView.Вот URL, который я пытаюсь перенаправить, который находится в приложении «сделки»:
path('<slug:slug>/', RedirectView.as_view(pattern_name='deal_detail', permanent=False))
Обратите внимание, что я также импортирую представления из ссылочного приложения, например, так:
from dealmazing.views import *
Новый URL-адрес, на который я хочу перенаправить его, находится в моей основной директории приложения и выглядит следующим образом:
path('<slug:slug>/', deal_by_detail, name='deal_detail'),
Проблема в том, что я получаю эту ошибку:
Reverse for 'deal_detail' not found. 'deal_detail' is not a valid view function or pattern name.
Разве нельзя ссылаться на внешнее имя шаблона?
ОБНОВЛЕНИЕ
Мои новые URL-адреса работают правильно после добавления «разборки» в мое имя шаблона имя-шаблона- но одна проблема.
вот код в моем приложении «сделки»
path('<slug:slug>/', RedirectView.as_view(pattern_name='dealmazing:deal_detail', permanent=False)),
и путь URL в моем приложении «сделки»
path('<slug:slug>/', deal_by_detail, name='deal_detail'),
Если перейти по старой ссылке, я получаю ошибку 'dealmazing' is not a registered namespace
.Обратите внимание, что у меня не было app_name или пространства имен, заданных в моем файле с URL.Я пытался это и до сих пор не работает.Это ошибка, которую я получаю:
Traceback:
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\urls\base.py" in reverse
74. extra, resolver = resolver.namespace_dict[ns]
During handling of the above exception ('dealmazing'), another exception occurred:
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\exception.py" in inner
35. response = get_response(request)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\views\generic\base.py" in view
69. return self.dispatch(request, *args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\views\generic\base.py" in dispatch
89. return handler(request, *args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\views\generic\base.py" in get
180. url = self.get_redirect_url(*args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\views\generic\base.py" in get_redirect_url
170. url = reverse(self.pattern_name, args=args, kwargs=kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\urls\base.py" in reverse
84. raise NoReverseMatch("%s is not a registered namespace" % key)
Exception Type: NoReverseMatch at /deals/steak-fries-beer-only-999-walkabout-wednesday/
Exception Value: 'dealmazing' is not a registered namespace
вот файл URL моей сделки:
from django.urls import include, path
from django.contrib import admin
from django.views.generic.base import RedirectView
from .views import *
from dealmazing.urls import *
from dealmazing.views import *
from deals.views import DealListView
from django.conf import settings
app_name = "deals"
urlpatterns = [
path('', Home.as_view(), name="deals"),
path('latest-deals', DealListView.as_view(), name="latest-deals"),
path('hot-deals', DealHotView.as_view(), name="hot-deals"),
path('results/', search, name='deal-search'),
path('category/<str:category>', RedirectView.as_view(pattern_name='dealmazing:category', permanent=False)),
path('<slug:slug>/', RedirectView.as_view(pattern_name='dealmazing:deal_detail', permanent=False)),
path('<int:pk>/like', like, name='like'),
path('<int:pk>/favorite', favorite, name='favorite'),
path('<int:pk>/remove_favorite', remove_favorite, name='remove_favorite'),
]
и файл моих основных (неутешительных) URL:
from django.conf.urls import url, include
from django.contrib.sitemaps.views import sitemap
from django.views.generic import TemplateView
from .sitemaps import *
from django.urls import path
from django.contrib import admin
from .views import *
from django.conf import settings
from deals.models import Deal
from deals.views import *
from django.conf.urls.static import static
sitemaps = {
'static': StaticViewSitemap,
'blog': BlogSitemap,
'blog-category': BlogCategorySitemap,
'deals': DealSitemap,
'deals-category': DealCategorySitemap,
'retailers': RetailerSitemap
}
urlpatterns = [
url(r'^$', Home.as_view(), name="home"),
url(r'^oauth/', include('social_django.urls', namespace='social')),
url(r'^admin/', admin.site.urls),
url(r'^blog/', include("blog.urls", namespace="blog")),
url(r'^accounts/', include("accounts.urls", namespace="accounts")),
url(r'^about/', about, name="about"),
url(r'^contact/', contact, name="contact"),
url(r'^disclosure/', disclosure, name="disclosure"),
url(r'^terms/', terms, name="terms"),
url(r'^privacy/', privacy, name="privacy"),
url(r'^submit_deal/', submit_deal, name="submit_deal"),
url(r'^thanks/', thanks, name="thanks"),
url(r"^deals/", include("deals.urls", namespace="deals")),
path('<slug:slug>/', deal_by_detail, name='deal_detail'),
path('deals/<slug:slug>', deals_by_retailer, name='retailer'),
path('category/<str:category>', deals_by_category, name='category'),
url(r"^newsletter/", include("newsletters.urls", namespace="newsletter")),
url(r'^ckeditor/', include('ckeditor_uploader.urls')),
url(r'^robots.txt$', TemplateView.as_view(template_name="robots.txt", content_type="text/plain"), name="robots_file"),
path('sitemap.xml', sitemap,
{'sitemaps': sitemaps},
name='django.contrib.sitemaps.views.sitemap'),
path('', include('django.contrib.auth.urls')),
]
if settings.DEBUG:
import debug_toolbar
urlpatterns += [
url(r'^__debug__/', include(debug_toolbar.urls)),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)