django-cms apphook 的 urls 在 Python shell 中使用 reverse() 不起作用

4 投票
2 回答
856 浏览
提问于 2025-04-18 17:31

我创建了一个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')

撰写回答