如何在 wagtail HTML 模板中使用 rooutablepageurl 标签
How to use routablepageurl tag in wagtail HTML template
我复习了 official docs 好几遍,但仍然对如何准确使用 routablepageurl
标签感到困惑。
以下来自官方文档
wagtail.contrib.routable_page.templatetags.wagtailroutablepage_tags.routablepageurl(context,page, url_name, *args, **kwargs)
routablepageurl
is similar to pageurl
, but works with pages using RoutablePageMixin
. It behaves like a hybrid between the built-in reverse, and pageurl
from Wagtail.
page
is the RoutablePage
that URLs will be generated from.
url_name
is a URL name defined in page.subpage_urls
.
Positional arguments and keyword arguments should be passed as normal positional arguments and keyword arguments.
Q1:需要的参数context
是如何提供的?
Q2: page
和 url_name
究竟代表什么?我没有在 page
模型中看到属性 (subpage_url
)。官方文档解释很混乱。
问题 3: 为什么有时 category.slug
用作 routablepageurl
模板标签的参数,如 this blog post.[=33= 中所示]
<a href="{% routablepageurl blog_page "post_by_category" category.slug %}">{{ category.name }}</a>
概览
routablepageurl
template tag 的文档部分非常短,由于大量引用了 Wagtail 和 Django 中的概念,因此可能让人觉得有点混乱。
让我们解压这条线:
routablepageurl
is similar to pageurl
, but works with pages using RoutablePageMixin
. It behaves like a hybrid between the built-in reverse
, and pageurl
from Wagtail.
- 首先,这是一个 custom template tag 函数,它以特定的顺序获取一些已知的 arguments/params ,可用于模板标签。这里要注意的重要一点是
context
是传递到模板标记函数调用中的东西,但在使用模板标记时不必显式传递它。
- 理解这一点需要稍微了解 Django 的 URL 系统是如何工作的,最好通读一下关于这个主题的 Django 文档 https://docs.djangoproject.com/en/3.2/topics/http/urls/
pageurl
这里是对具有类似行为的不同模板标签的引用,您可以查看 pageurl
template tag. 的文档
routablePageMixin
是一个 Page
mixin,允许使用多个子页面路由,每个子页面路由的名称都带有装饰器,如 @route(r'^past/$')
.
- 的行为类似于
reverse
是对 django.urls.reverse
函数的引用,该函数采用 URL 名称并将 return URL。 Reverse 提供了一种方法,不仅可以根据名称获取 URL,还可以传递参数,这将根据这些参数构建完整的 URL。
- 在所有这些参考文献中,当您声明 URL 模式(例如所有 'blog/DD-MM-YYYY' 页面)时,
name
is also a Django concept 的概念会在其他地方引用它们。
具体答案
Q1:需要的参数context
是如何提供的?
context
默认为所有模板标签函数调用提供。
Q2:page
和url_name
到底代表什么?
page
是模态实例,这将是使用 RoutablePageMixin
. 的 page
url_name
是页面中定义的 URL 模式的名称,这可能有点不清楚,但它是用于创建子路由的函数名称,在下面的代码示例(来自文档),url 名称将是 current_events
.
class EventIndexPage(RoutablePageMixin, Page):
#...
@route(r'^$') # will override the default Page serving mechanism
def current_events(self, request):
"""
Q3:为什么category.slug
可以作为这个模板标签的参数
- 这是将额外的 params/arguments 传递给模板标记的示例,这些又传递给 URL 解析器系统以构建 URL.
- 例如,在下面的代码片段中(来自博客 post)如果
category.slug
是 'coffee shops'(一个 category
),就会发生这种情况:
- 给定标签用法
<a href="{% routablepageurl blog_page "post_by_category" category.slug %}">{{ category.name }}</a>
blog_page
将是一个变量,即当前 page
实例
"post_by_category"
表示找到名称(方法名)为post_by_category
的URL子路由。
- 之后的任何其他参数将用于基于 URL 模式构建 URL,假设
category.slug
是 'coffee-shops'(slug 是URL 类别 'Coffee Shops' 的有效字符串)。
- 在下面的代码中,模式是
r'^category/(?P<category>[-\w]+)/$'
,其中 <category>
(尖括号)是一个变量用法,URL 解析器将注入 slug 并构建一个 URL 'category/coffee-shops' 的路径
class BlogPage(RoutablePageMixin, Page):
description = models.CharField(max_length=255, blank=True,)
#...
@route(r'^category/(?P<category>[-\w]+)/$')
def post_by_category(self, request, category, *args, **kwargs):
self.search_type = 'category'
- 重要的是要了解任何关键字参数或参数都可以传递给模板标签,这些值将依次传递给读取 URL 模式的 URL 解析器语法并尝试根据这些参数在模式中的使用方式构建 URL。
我复习了 official docs 好几遍,但仍然对如何准确使用 routablepageurl
标签感到困惑。
以下来自官方文档
wagtail.contrib.routable_page.templatetags.wagtailroutablepage_tags.routablepageurl(context,page, url_name, *args, **kwargs)
routablepageurl
is similar topageurl
, but works with pages usingRoutablePageMixin
. It behaves like a hybrid between the built-in reverse, andpageurl
from Wagtail.
page
is theRoutablePage
that URLs will be generated from.
url_name
is a URL name defined inpage.subpage_urls
.Positional arguments and keyword arguments should be passed as normal positional arguments and keyword arguments.
Q1:需要的参数context
是如何提供的?
Q2: page
和 url_name
究竟代表什么?我没有在 page
模型中看到属性 (subpage_url
)。官方文档解释很混乱。
问题 3: 为什么有时 category.slug
用作 routablepageurl
模板标签的参数,如 this blog post.[=33= 中所示]
<a href="{% routablepageurl blog_page "post_by_category" category.slug %}">{{ category.name }}</a>
概览
routablepageurl
template tag 的文档部分非常短,由于大量引用了 Wagtail 和 Django 中的概念,因此可能让人觉得有点混乱。
让我们解压这条线:
routablepageurl
is similar topageurl
, but works with pages usingRoutablePageMixin
. It behaves like a hybrid between the built-inreverse
, andpageurl
from Wagtail.
- 首先,这是一个 custom template tag 函数,它以特定的顺序获取一些已知的 arguments/params ,可用于模板标签。这里要注意的重要一点是
context
是传递到模板标记函数调用中的东西,但在使用模板标记时不必显式传递它。 - 理解这一点需要稍微了解 Django 的 URL 系统是如何工作的,最好通读一下关于这个主题的 Django 文档 https://docs.djangoproject.com/en/3.2/topics/http/urls/
pageurl
这里是对具有类似行为的不同模板标签的引用,您可以查看pageurl
template tag. 的文档
routablePageMixin
是一个Page
mixin,允许使用多个子页面路由,每个子页面路由的名称都带有装饰器,如@route(r'^past/$')
.- 的行为类似于
reverse
是对django.urls.reverse
函数的引用,该函数采用 URL 名称并将 return URL。 Reverse 提供了一种方法,不仅可以根据名称获取 URL,还可以传递参数,这将根据这些参数构建完整的 URL。 - 在所有这些参考文献中,当您声明 URL 模式(例如所有 'blog/DD-MM-YYYY' 页面)时,
name
is also a Django concept 的概念会在其他地方引用它们。
具体答案
Q1:需要的参数context
是如何提供的?
context
默认为所有模板标签函数调用提供。
Q2:page
和url_name
到底代表什么?
page
是模态实例,这将是使用RoutablePageMixin
. 的 url_name
是页面中定义的 URL 模式的名称,这可能有点不清楚,但它是用于创建子路由的函数名称,在下面的代码示例(来自文档),url 名称将是current_events
.
page
class EventIndexPage(RoutablePageMixin, Page):
#...
@route(r'^$') # will override the default Page serving mechanism
def current_events(self, request):
"""
Q3:为什么category.slug
可以作为这个模板标签的参数
- 这是将额外的 params/arguments 传递给模板标记的示例,这些又传递给 URL 解析器系统以构建 URL.
- 例如,在下面的代码片段中(来自博客 post)如果
category.slug
是 'coffee shops'(一个category
),就会发生这种情况:- 给定标签用法
<a href="{% routablepageurl blog_page "post_by_category" category.slug %}">{{ category.name }}</a>
blog_page
将是一个变量,即当前page
实例"post_by_category"
表示找到名称(方法名)为post_by_category
的URL子路由。- 之后的任何其他参数将用于基于 URL 模式构建 URL,假设
category.slug
是 'coffee-shops'(slug 是URL 类别 'Coffee Shops' 的有效字符串)。 - 在下面的代码中,模式是
r'^category/(?P<category>[-\w]+)/$'
,其中<category>
(尖括号)是一个变量用法,URL 解析器将注入 slug 并构建一个 URL 'category/coffee-shops' 的路径
- 给定标签用法
class BlogPage(RoutablePageMixin, Page):
description = models.CharField(max_length=255, blank=True,)
#...
@route(r'^category/(?P<category>[-\w]+)/$')
def post_by_category(self, request, category, *args, **kwargs):
self.search_type = 'category'
- 重要的是要了解任何关键字参数或参数都可以传递给模板标签,这些值将依次传递给读取 URL 模式的 URL 解析器语法并尝试根据这些参数在模式中的使用方式构建 URL。