覆盖serve()

时间:2017-07-18 10:38:48

标签: wagtail

我按照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,
        })

关于出了什么问题的任何想法?

1 个答案:

答案 0 :(得分:1)

您在模板代码中使用变量self,但在调用self时没有传递render个上下文变量 - 仅page和{{ 1}}。

不建议在模板中使用form,因为它与某些模板引擎(如Jinja2)不兼容。您应该使用self代替:

page

或者,如果您不想更新模板代码,可以将 {% if page.seo_title %}{{ page.seo_title }}{% else %}{{ page.title }}{% endif %} 传递给self

render