django的-CMS:使用apphooks不与反向工作网址()或{%URL%}(django-cm

2019-07-30 03:28发布

我使用的Django-CMS与apphooks显示书的详细信息。 我需要与应用挂钩的页面接受塞,指定要显示的书。

我创建了一个名为“图书”页面,并添加了apphook“BookDetailApp”。

下面是我的books.cms_app文件的样子:

class BooksApp (CMSApp):
    name = _('Book Detail Page Application')
    urls = ['books.urls']

apphook_pool.register(BooksApp)

下面是我的books.urls的样子:

urlpatterns = patterns('',
    url(r'^(?P<slug>[\w\-]+)?', BookDetailView.as_view(), name='book_detail'),
)

这里就是我的books.views文件的样子:

class BookDetailView (DetailView):
    model = Book
    template_name = 'layouts/book-detail.html'
    context_object_name = 'book'

当我去直接预订详细信息页面这一切工作正常。 因此,要http://localhost:8000/books/the-book-slug/工作正是我想。

问题是,我需要能够从宣传片主页上链接到特定的书的详细信息页面,并没有一个预期的方法是为我工作。

从使用的Django-CMS的PAGE_URL模板标签不起作用,因为它只接受一个参数,所以我不能提供确定哪些书显示所需要的毛坯:

<a href="{% page_url 'book_detail' %}">go</a>

正如预期的那样这只是重定向到http://localhost:8000/books/因为没有包括所需的蛞蝓会抛出一个错误。

所以,我的下一个选择是使用url模板标签或定义get_absolute_url()对模型的功能。 这两种方法都不工作:

<a href="{% url book_detail book.slug %}">go</a>

def get_absolute_url(self):
    return reverse('book_detail', args=[self.slug])

这些都导致NoReverseMatch: Reverse for 'book_detail' not found错误。

如果我有我的主要网址conf下books.urls的conf然后它工作。 所以这样看来,如果URL是唯一正在使用一个CMS apphook,它不能被Django的逆转。

包括我的主要网址books.urls似乎是一个肮脏的解决方案,我绝对不想硬编码在模板或网址get_absolute_url功能。 无论这些解决方案似乎很“pythonesque”。

有什么建议?

编辑:

逆向工程只有当我使用的语言命名空间。 根据文档指定语言命名空间不应该要求。

>>> reverse('en:book_detail', args=[book.slug])

Answer 1:

这显然是由于有我们的应用程序cms.middleware.multilingual.MultilingualURLMiddleware然后迫使所有{% url %}模板标签和reverse()函数,要求语言命名空间。

由于我们的网站没有本地化,消除中间件的罚款。 该文件似乎不是很清楚,我在这终于发现从其他来源答案。



文章来源: django-cms: urls used by apphooks don't work with reverse() or {% url %}