我为django app写了一个命令:
for p in Article.public.all():
data += '{"index": {"_id": "%s", "_type": "article"}}\n' % p.pk
data += json.dumps({
"title": p.title,
"category": p.category.category,
"content_type": p.content_type,
"duration": p.get_audio_duration(),
"thumbnail": p.get_thumbnail(),
"date": datetime.strftime(p.date, '%d.%m.%Y'),
"url": p.get_absolute_url(),
"content": p.content
}) + '\n'
response = requests.put('{}/radio_index/_bulk'.format(settings.ES_URL), data=data)
get_absolute_url
方法如下所示:
def get_absolute_url(self):
return reverse('tv_article_hook:article_tv_detail', kwargs={'slug': self.slug})
我正在使用Django CMS apphooks。 Apphook网址是:
urlpatterns = patterns('',
url(r'^$', ArticleTvListView.as_view(), name='article_tv_list'),
url(r'^(?P<slug>[^/]+)/$', ArticleTvView.as_view(), name='article_tv_detail')
)
当我在模板或REST api中使用get_absolute_url
时,它可以正常工作。但当我通过manage.py feed_index
代码运行命令失败p.get_absolute_url
时出现错误:
django.core.urlresolvers.NoReverseMatch: Reverse for 'article_tv_detail' with arguments '()' and keyword arguments '{'slug': 'some slug'}' not found. 0 pattern(s) tried: []
我该如何解决这个问题?
答案 0 :(得分:0)
您需要确保Django本身(而不仅仅是CMS)知道应用程序的命名空间tv_article_hook
。
我怀疑它是在CMS注册的,但不是Django知道的命名空间。现在,根据您使用的Django版本,有两种方法可以为Django定义命名空间。但请阅读application docs,基本上您可以像这样定义自己的应用配置;
# tv_article/__init__.py
default_app_config = 'tv_article.apps.TVArticleConfig'
# tv_article/apps.py
from django.apps import AppConfig
class TVArticleConfig(AppConfig):
name = 'tv_article'
verbose_name = "TV Article"
使用该设置,您应该能够像这样修改代码(从CMS命名空间中移除&#39; _hook&#39;因为这是CMS术语,但我们只是在谈论一个Django应用程序在这里);
def get_absolute_url(self):
return reverse('tv_article:article_tv_detail', kwargs={'slug': self.slug})