覆盖 serve() 时页面模型出现问题

Issue with Page model when overriding serve()

我按照 Github 上 Wagtail Form Example 的说明在 Wagtail 之外创建了标准的 Django 表单。这非常有效,但是现在有一个新问题。

在有表单的页面上,base.html中的标准页面相关模板代码不再起作用,即:

        {% block title %}
            {% if self.seo_title %}{{ self.seo_title }}{% else %}{{ self.title }}{% endif %}
        {% endblock %}
        {% block title_suffix %}
            {% with self.get_site.site_name as site_name %}
                {% if site_name %}| {{ site_name }}{% endif %}
            {% endwith %}
        {% endblock %}

我的 serve() 方法重写如下:

class MyPage(Page):
# My Code

    def serve(self, request):
        from .forms import MyForm

        if request.method == 'POST':

            form = MyForm(request.POST)

            if form.is_valid():
                my_data = form.save()

                return render(request, 'my_other_template.html', {
                        'page': self,
                        'my_data': my_data,
                    })

        else:
            form = MyForm()

        return render(request, 'my_template.html', {
            'page': self,
            'form': form,
        })

有什么问题吗?

您正在模板代码中使用变量 self,但在对 render 的调用中没有传递 self 上下文变量 - 只有 pageform.

不鼓励在模板中使用 self,因为它与 Jinja2 等某些模板引擎不兼容。您应该使用 page 代替:

    {% if page.seo_title %}{{ page.seo_title }}{% else %}{{ page.title }}{% endif %}

或者,如果您不想更新您的模板代码,您可以在对 render 的调用中传递 self:

    return render(request, 'my_template.html', {
        'self': self,
        'page': self,
        'form': form,
    })