【发布时间】:2019-12-02 16:26:41
【问题描述】:
我有一个主要使用 Django 制作的网站,但有一些内容页面需要由 Wagtail 管理。
如何在 Django 模板中链接到使用 Wagtail 创建的页面?我不想对任何页面进行硬编码。客户端应该能够在 Wagtail 中创建一个页面,并且应该在 Django 模板中创建指向该页面的链接。
问题是我不知道如何通过 Django 模板引用 Wagtail 页面。
【问题讨论】:
我有一个主要使用 Django 制作的网站,但有一些内容页面需要由 Wagtail 管理。
如何在 Django 模板中链接到使用 Wagtail 创建的页面?我不想对任何页面进行硬编码。客户端应该能够在 Wagtail 中创建一个页面,并且应该在 Django 模板中创建指向该页面的链接。
问题是我不知道如何通过 Django 模板引用 Wagtail 页面。
【问题讨论】:
当你说
通过 Django 模板引用 Wagtail 页面
我假设您的意思是如果用户单击导航项,则呈现将带用户进入页面的导航。要呈现页面树的导航,您可以在模板文件(通常为 base.html)中执行以下操作:
{% for item in request.site.root_page.get_children.live.in_menu %}
<a href="{% pageurl item %}">{{ item.title }}</a>
{% endfor %}
以上是最简单的页面导航渲染。在构建导航时,您可能会遇到许多其他注意事项,其中之一是构建嵌套导航。如果您需要这些信息,我也可以发布相关信息(我通过递归调用来自base.html 的单独文件中的一小段 html 来构建无限制的嵌套导航)。
【讨论】:
base.html 中输入您的代码时,我没有从for 循环中得到任何结果。我的base.html 位于我的 Django 根目录的模板文件夹中。我想知道它是否无法从那里检测 Wagtail 网站。
MIDDLEWARE 声明中包含了wagtail.core.middleware.SiteMiddleware?
MIDDLEWARE 设置。
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'wagtail.core.middleware.SiteMiddleware', 'wagtail.contrib.redirects.middleware.RedirectMiddleware', ]