Python 使用模式名从Django中的另一个应用程序调用URL名称+;重定向VEW

Python 使用模式名从Django中的另一个应用程序调用URL名称+;重定向VEW,python,django,redirect,Python,Django,Redirect,我正在为一些URL路径进行重定向 我最终需要将一些路径移动到另一个应用程序 调用模式名以引用重定向视图中的其他URL时出现问题。以下是我试图重定向的url,它位于“deals”应用程序中: path('<slug:slug>/', RedirectView.as_view(pattern_name='deal_detail', permanent=False)) 问题是我遇到了以下错误: 未找到“交易详细信息”的反向项“交易详细信息”不是有效的查看功能或模式名称。 不能引用外部模

我正在为一些URL路径进行重定向

我最终需要将一些路径移动到另一个应用程序

调用模式名以引用重定向视图中的其他URL时出现问题。以下是我试图重定向的url,它位于“deals”应用程序中:

 path('<slug:slug>/', RedirectView.as_view(pattern_name='deal_detail', permanent=False))
问题是我遇到了以下错误:

未找到“交易详细信息”的反向项“交易详细信息”不是有效的查看功能或模式名称。

不能引用外部模式名称吗

使现代化 在我的URL模式名称中添加“Deamazing”后,我的新URL正常工作——但有一个问题

以下是我的“交易”应用程序中的代码

path('/',RedirectView.as_-view(pattern_-name='deamazing:deal_-detail',permanent=False)),

以及我的“Deamazing”应用程序中的url路径

path(“/”,按详细信息进行交易,name='deal\u detail'),

如果转到旧链接,我会得到一个
“deamazing”不是注册的命名空间的错误。注意,我的Deamazing URL文件中没有设置app_名称或命名空间。我试过了,但还是不起作用。这是我得到的错误:

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
这是我的文件:

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'),
]
从django.url导入包括,路径
从django.contrib导入管理
从django.views.generic.base导入重定向视图
从。视图导入*
从deamazing.url导入*
从deamazing.views导入*
从deals.views导入DealListView
从django.conf导入设置
app_name=“交易”
URL模式=[
路径(“”,Home.as_view(),name=“deals”),
路径('latest-deals',DealListView.as_view(),name=“latest-deals”),
路径('hot-deals',DealHotView.as_view(),name=“hot-deals”),
路径('results/',search,name='deal-search'),
路径('category/',重定向视图.as_视图(pattern_name='deamazing:category',permanent=False)),
路径('/',RedirectView.as_view(pattern_name='deamazing:deal_detail',permanent=False)),
路径('/like',like,name='like'),
路径('/favorite',favorite,name='favorite'),
路径('/remove\u favorite',remove\u favorite,name='remove\u favorite'),
]
和我的核心(Deamazing)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)
从django.conf.url导入url,包括
从django.contrib.sitemaps.views导入站点地图
从django.views.generic导入模板视图
从.sitemaps导入*
从django.url导入路径
从django.contrib导入管理
从。视图导入*
从django.conf导入设置
从deals.models导入Deal
从deals.views导入*
从django.conf.url.static导入静态
网站地图={
“静态”:StaticViewSitemap,
“博客”:博客网站地图,
“博客类别”:BlogCategorySitemap,
“交易”:DealSitemap,
“交易类别”:DealCategorySitemap,
“零售商”:RetailerSitemap
}
URL模式=[
url(r'^$',Home.as_view(),name=“Home”),
url(r“^oauth/”,包括('social_django.url',namespace='social'),
url(r“^admin/”,admin.site.url),
url(r“^blog/”,包括(“blog.url”,namespace=“blog”),
url(r“^accounts/”,包括(“accounts.url”,namespace=“accounts”),
url(r“^about/”,about,name=“about”),
url(r“^contact/”,contact,name=“contact”),
url(r“^disposition/”,disposition,name=“disposition”),
url(r“^terms/”,terms,name=“terms”),
url(r“^privacy/”,privacy,name=“privacy”),
url(r“^submit\u-deal/”,submit\u-deal,name=“submit\u-deal”),
url(r'^Thank/',Thank,name=“Thank”),
url(r“^deals/”,包括(“deals.url”,namespace=“deals”),
路径(“/”,按交易详情,name='deal'u detail'),
路径('deals/',deals按零售商,name='零售商'),
路径('category/',按类别进行交易,名称='category'),
url(r“^newsletter/”,包括(“newsletters.url”,namespace=“newsletter”),
url(r“^ckeditor/”,包括('ckeditor\u uploader.url'),
url(r“^robots.txt$”,TemplateView.as_视图(template_name=“robots.txt”,content_type=“text/plain”),name=“robots_文件”),
路径('sitemap.xml',sitemap,
{'sitemaps':sitemaps},
name='django.contrib.sitemaps.views.sitemap'),
路径(“”,包括('django.contrib.auth.url'),
] 
如果设置为.DEBUG:
导入调试工具条
URL模式+=[
url(r'^____/”,包括(debug_toolbar.url)),
]+静态(settings.MEDIA\u URL,document\u root=settings.MEDIA\u root)

如果您在
core/url.py
中设置了
app\u name
,或者在包含URL时设置了名称空间,则需要包含此名称空间。例如:

path('<slug:slug>/', RedirectView.as_view(pattern_name='core:deal_detail', permanent=False))
path('/',RedirectView.as_view(pattern_name='core:deal_detail',permanent=False))

hey@alasdair一个简单的问题——我的URL似乎在工作,但如果我访问一个旧链接,它不会重定向,并显示为“Deamazing”不是注册的命名空间——现在在我的Deamazing URL文件(我的核心)中我没有设置app_name或namespace——做其中一个可以解决这个问题吗?恐怕我不明白从评论中到底发生了什么。查看实际代码比查看代码描述容易得多。如果你没有设置
app\u name
namespace
,那么按照我的建议添加一个名称空间是没有用的。很抱歉——我只是在更新后添加了上面的所有信息——希望这能帮助你更好地理解我,就像我说的,如果你没有设置
app\u name
namespace
,那么我建议使用
'deamazing:deal\u detail'
是行不通的。我仍然不清楚你的URL模式在哪些文件中,或者你是如何包含它们的。啊..好的,嗯。。如果有帮助的话,我添加了两个URL文件
path('<slug:slug>/', RedirectView.as_view(pattern_name='core:deal_detail', permanent=False))