我使用的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])