任何人都可以告诉我有关动态页面的信息吗?
我的用例如下:
我在主页上有许多对象(图像)
当我点击图片时,我想重定向到关于此对象的页面(我可以通过ajax获取有关对象的详细信息)
但我不想为每个对象创建页面。我宁愿做这样的smth:mysite.com/images?image_id=254(有这样的页面的模型和模板)
可以吗?如果是这样,请告诉我在文档xx
中查看的位置答案 0 :(得分:6)
这听起来像RoutablePageMixin的理想用途,它允许您使用类似Django的URL模式为一个页面定义多个视图。在这种情况下,您可以定义两个视图,一个用于主页面(在URL /images/
处),另一个用于特定对象(在URL /images/123/
处):
from django.shortcuts import get_object_or_404, render
from wagtail.contrib.wagtailroutablepage.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,
})
如果你想要更低级别,可以尝试overriding the page's serve
method - 这就是RoutablePageMixin
内部工作的方式。覆盖serve
足以支持mysite.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,
})
要获得mysite.com/images/123/形式的更好网址,您也可以override the route
method。