django-cms:apphooks 使用的 url 不适用于 reverse() 或 {% url %}

标签 django url content-management-system reverse django-cms

我正在使用带有 apphooks 的 django-cms 来显示书籍详细信息。我需要带有应用程序 Hook 的页面来接受指定要显示哪本书的 slug。

我创建了一个名为“books”的页面并添加了应用程序“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 模板标记不起作用,因为它只接受一个参数,因此我无法提供确定要显示哪本书所需的 slug:
<a href="{% page_url 'book_detail' %}">go</a>

正如预期的那样,这只会重定向到 http://localhost:8000/books/这会引发错误,因为未包含所需的 slug。

所以我接下来的选择是使用 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错误。

如果我将 books.urls conf 包含在我的主 url conf 中,那么它就可以工作。因此,如果 url 仅由 cms apphook 使用,则 django 无法将其反转。

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

有什么建议?

编辑:

只有当我使用语言命名空间时,反向才有效。根据文档指定语言命名空间不应该是必需的。
>>> reverse('en:book_detail', args=[book.slug])

最佳答案

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

由于我们的站点未本地化,因此删除中间件工作正常。文档对我来说似乎不太清楚,最后从另一个来源找到了答案。

关于django-cms:apphooks 使用的 url 不适用于 reverse() 或 {% url %},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11216565/

相关文章:

python - 如何防止 pytest 删除测试用例之间的数据库记录?

django - 在 Django 中执行 PostgreSql 查询

python - 当减数为 None 时,使用减法运算符的 Django 注释返回 None

nginx - 为什么 wiki.js 安装时需要公共(public) URL?

go - 如何使用 'routes' 文件读取 Revel 中的查询参数?

javascript - 使用 javascript 在中间添加新的 Param URL

c# - Sitecore 动态更改字段工具提示

php - 此用例的 View 或有机组

python - 在 Reportlab SimpleDocTemplate 上应用对齐以按行数附加多个条形码

java - WordPress、CMS Made Simple 还是其他?