2

谁能告诉我关于鹡鸰中的动态页面?

我的用例如下:

  1. 我在主页上有许多对象(图像)

  2. 当我单击图像时,我想被重定向到有关此对象的页面(我可以通过 ajax 获取有关对象的详细信息)

  3. 但我不想为每个对象创建页面。我宁愿这样:mysite.com/images?image_id=254(带有此类页面的模型和模板)

可以做到吗?如果是这样,请告诉我在哪里查看文档 xx

4

1 回答 1

6

这听起来像是RoutablePageMixin的理想用途,它允许您使用类似 Django 的 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,
        })

如果您想降低级别,可以尝试覆盖页面的serve方法- 这就是RoutablePageMixin内部的工作方式。覆盖serve足以支持诸如 mysite.com/images?image_id=254 之类的 URL:

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/ 形式的 URL,您也可以覆盖该route方法

于 2016-01-10T23:30:29.637 回答