python - NoReverseMatch at/sitemap.xml Django 与来自 app.urls 的 StaticViewSitemap

标签 python django

我想在我的 website.urls 文件中的 sitemap.xml 文件中显示 url

从此网址文件中,我可以轻松显示条款 隐私和其他

网址

from django.conf.urls import include, url
from django.contrib import admin
from django.contrib.staticfiles import views
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf import settings
from django.conf.urls import *  # NOQA
from django.conf.urls.i18n import i18n_patterns
from django.contrib.sitemaps.views import sitemap
from .sitemaps import StaticViewSitemap
from . import views


sitemaps = {
    'static': StaticViewSitemap,
}

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('website.urls')),
    url(r'^terms/$', views.terms, name='terms'),
    url(r'^privacy/$', views.privacy, name='privacy'),
    url(r'^cdg/$', views.cdg, name='cdg'),
    url(r'^about/$', views.about, name='about'),
    url(r'^icon/$', views.icon, name='icon'),
    url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap')
]


# This is only needed when using runserver.
if settings.DEBUG:
    urlpatterns = patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve',  # NOQA
            {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
        ) + staticfiles_urlpatterns() + urlpatterns  # NOQA

但是当我想从另一个 url 文件(它是位于子文件夹内的应用程序的 url 文件)获取 View 时,我遇到了错误。

这是我的sitemap.py文件

from django.contrib import sitemaps
from django.core.urlresolvers  import reverse

class StaticViewSitemap(sitemaps.Sitemap):
    priority= 0.5
    changefreq ='daily'

    def items(self):
        return ['terms','privacy', 'about', 'cdg','support']

    def location(self, item):
        return reverse(item)

这里是website.url py文件

from django.conf.urls import patterns, url
from . import views

app_name = 'website'
urlpatterns = patterns('',

    url(r'^support/$', views.support, name='support'),
    url(r'^galerie/$', views.galerie, name='galerie'),  
    url(r'^showcase/$', views.showcase, name='showcase'),
    url(r'^blog/$', views.blog, name='blog'),
    )

我遇到了这个错误:

NoReverseMatch at /sitemap.xml
Reverse for 'support' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Request Method: GET
Request URL:    http://localhost:8000/sitemap.xml
Django Version: 1.9.9
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'support' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Exception Location: /Users/R/Virtualenvs/p3-dj1_9/lib/python3.5/site-packages/django/core/urlresolvers.py in _reverse_with_prefix, line 508

如有任何帮助,我们将不胜感激

最佳答案

support URL 是在应用程序中定义的,该应用程序包含在您的 URL 文件中的以下行中:

url(r'^', include('website.urls')),

reverse('support') 使 Django 在主 URL 文件中查找名为 'support' 的 URL。要正确访问此URL,您需要使用正确的URL namespace ,默认为您的应用程序的名称。

换句话说,这是访问 URL 的正确方法:

return reverse('website:support')

这意味着您的 location View 必须接收 'website:support' 而不是仅接收 'support'

如果您希望命名空间不同于 'website',只需将所需的值传递给 include() 方法即可。

url(r'^', include('website.urls', namespace='another-name')),

那么,反向参数将是:

return reverse('another-name:support')

关于python - NoReverseMatch at/sitemap.xml Django 与来自 app.urls 的 StaticViewSitemap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41064539/

相关文章:

django - Django生产服务器中的NoReverseMatch

Django 社交认证 : what is the best fork?

python - 将 Django 二进制字段转换为数组

python - 什么时候导入才能找到模块?

python - TensorFlow:CentOS 上的二进制安装错误

python-具有阶跃响应的卷积

python请求模块: what's the difference between head and get request method

python - 用于在 Python 或 Ruby 中自动映射外键的 ORM 库

django 1.10 一个应用程序页面带有链接重定向到另一个应用程序页面

django模型形式带有外键的干净方法