动态鹡鸰页面
Dynamic wagtail page
谁能告诉我 wagtail 中的动态页面?
我的用例如下:
我在主页上有很多对象(图片)
当我点击图片时,我想被重定向到关于这个对象的页面(我可以通过 ajax 获得关于对象的详细信息)
但我不想为每个对象创建页面。我宁愿像这样制作 smth:mysite.com/images?image_id=254(带有此类页面的模型和模板)
可以吗?如果是这样,请告诉我在哪里查看文档 xx
这听起来像是 RoutablePageMixin 的理想用途,它允许您使用 Django-like URL 模式为一个页面定义多个视图。在这种情况下,您可以定义两个视图,一个用于主页(在 URL /images/
),一个用于特定对象(在 URL /images/123/
):
from django.shortcuts import get_object_or_404, render
from wagtail.contrib.routable_page.models import RoutablePageMixin, route
class ProductListingPage(RoutablePageMixin, Page):
@route(r'^$')
def index_view(self, request):
# render the index view
return render(request, 'products/index.html', {
'page': self,
})
@route(r'^(\d+)/$')
def product_view(self, request, product_id):
# render the view for a single item
product = get_object_or_404(Product, id=product_id)
return render(request, 'products/product.html', {
'product': product,
'page': self,
})
如果你想去 lower-level,你可以尝试 overriding the page's serve
method - 这就是 RoutablePageMixin
内部的工作方式。覆盖 serve
足以支持像 mysite 这样的 URLs。com/images?image_id=254 :
class ProductListingPage(Page):
def serve(self, request):
product_id = request.GET.get('image_id', None)
if product_id is None:
return render(request, 'products/index.html', {
'page': self,
})
else:
product = get_object_or_404(Product, id=product_id)
return render(request, 'products/product.html', {
'product': product,
'page': self,
})
要获得更好的 URL 表单 mysite。com/images/123/,您也可以 override the route
method。
谁能告诉我 wagtail 中的动态页面?
我的用例如下:
我在主页上有很多对象(图片)
当我点击图片时,我想被重定向到关于这个对象的页面(我可以通过 ajax 获得关于对象的详细信息)
但我不想为每个对象创建页面。我宁愿像这样制作 smth:mysite.com/images?image_id=254(带有此类页面的模型和模板)
可以吗?如果是这样,请告诉我在哪里查看文档 xx
这听起来像是 RoutablePageMixin 的理想用途,它允许您使用 Django-like URL 模式为一个页面定义多个视图。在这种情况下,您可以定义两个视图,一个用于主页(在 URL /images/
),一个用于特定对象(在 URL /images/123/
):
from django.shortcuts import get_object_or_404, render
from wagtail.contrib.routable_page.models import RoutablePageMixin, route
class ProductListingPage(RoutablePageMixin, Page):
@route(r'^$')
def index_view(self, request):
# render the index view
return render(request, 'products/index.html', {
'page': self,
})
@route(r'^(\d+)/$')
def product_view(self, request, product_id):
# render the view for a single item
product = get_object_or_404(Product, id=product_id)
return render(request, 'products/product.html', {
'product': product,
'page': self,
})
如果你想去 lower-level,你可以尝试 overriding the page's serve
method - 这就是 RoutablePageMixin
内部的工作方式。覆盖 serve
足以支持像 mysite 这样的 URLs。com/images?image_id=254 :
class ProductListingPage(Page):
def serve(self, request):
product_id = request.GET.get('image_id', None)
if product_id is None:
return render(request, 'products/index.html', {
'page': self,
})
else:
product = get_object_or_404(Product, id=product_id)
return render(request, 'products/product.html', {
'product': product,
'page': self,
})
要获得更好的 URL 表单 mysite。com/images/123/,您也可以 override the route
method。