django-cms apphook 的 urls 在 Python shell 中使用 reverse() 不起作用
我创建了一个django CMS的应用挂钩(apphook)。不幸的是,我在使用Python命令行时无法反向解析这个应用挂钩的URL。
我的 cms_app.py
文件内容如下:
class ArticleApp (CMSApp):
name = _('Article App')
app_name = 'article_app'
urls = ['article.urls']
apphook_pool.register(ArticleApp)
这是我的 urls.py
文件:
urlpatterns = patterns('',
url(r'^(?P<slug>[\w\-]+)?', ArticleView.as_view(), name='article-by-slug'),
)
模板文件是:
{% url 'article_app:article-by-slug' article.slug %}
在模板中反向解析URL的效果如我所期待的那样。如果我在Python命令行中尝试做同样的事情,就会收到一个错误信息:
>>> from django.core.urlresolvers import reverse
>>> from article.models import Article
>>> a = Article.objects.get(pk=1)
>>> reverse('article_app:article-by-slug', kwargs={'slug': a.slug})
# Reverse for 'article_app:article-by-slug' with arguments '()' and keyword arguments '{'slug': 'this-is-article-1'}' not found.
在主 urls.py
文件中定义的其他URL在命令行中正常工作。只有应用挂钩的URL不行。
有什么建议吗?
谢谢!
2 个回答
0
把反转操作中的命名空间去掉:
reverse('article-by-slug', kwargs={'slug': a.slug})
4
感谢@Benjamin Wohlwend的帮助,我解决了这个问题。原来这个应用的页面在“en-us”语言下是不可用的(这是Django管理命令,比如“shell”的默认语言)。我需要在执行反向操作之前先激活正确的语言:
from django.utils import translation
translation.activate('de')