我想在我的 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/