覆盖 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
上下文变量 - 只有 page
和form
.
不鼓励在模板中使用 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,
})
我按照 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
上下文变量 - 只有 page
和form
.
不鼓励在模板中使用 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,
})