在 Django 表单中访问变量
Accessing variables in Django forms
我 运行 遇到的问题是如何在表单中显示一些额外的文本,
特别是上一步的值。重点是向用户显示一条消息,例如 "you have chosen {{ value_from_step_0 }} as your starter, now choose a main course."
我可以从步骤 0 中获取该值,如下所示:
class MenuWizard(SessionWizardView):
def get_form_kwargs(self, step=None):
kwargs = {}
if step == '1':
starter = self.get_cleaned_data_for_step('0')['starter']
kwargs.update({'starter': starter})
class MainCourseForm(forms.Form):
def __init__(self, *args, **kwargs):
starter = kwargs.pop('starter')
print "{0} chosen".format(starter) # This works
super(DomainForm, self).__init__(*args, **kwargs)
# What next?
如果我不弹出 'starter' 值,那么 super 调用将失败。但是,我怎样才能将该值放入相关模板中呢?大概我需要在 init 中做一些进一步的事情或者覆盖其他东西,但是什么?
首先,请注意 1.7 不受支持,表单向导在 1.8 中已从 Django 中删除,现在位于第三方 formtools 库中。
这实际上不是表单的工作,而是视图的工作。 SessionWizardView 是一个标准的基于 class 的视图,与大多数基于 class 的视图一样,它允许您覆盖 get_context_data
以将元素添加到模板内容。请参阅 the documentation,其中有一个使用 self.steps.current
检查当前步骤名称的示例。
我 运行 遇到的问题是如何在表单中显示一些额外的文本, 特别是上一步的值。重点是向用户显示一条消息,例如 "you have chosen {{ value_from_step_0 }} as your starter, now choose a main course."
我可以从步骤 0 中获取该值,如下所示:
class MenuWizard(SessionWizardView):
def get_form_kwargs(self, step=None):
kwargs = {}
if step == '1':
starter = self.get_cleaned_data_for_step('0')['starter']
kwargs.update({'starter': starter})
class MainCourseForm(forms.Form):
def __init__(self, *args, **kwargs):
starter = kwargs.pop('starter')
print "{0} chosen".format(starter) # This works
super(DomainForm, self).__init__(*args, **kwargs)
# What next?
如果我不弹出 'starter' 值,那么 super 调用将失败。但是,我怎样才能将该值放入相关模板中呢?大概我需要在 init 中做一些进一步的事情或者覆盖其他东西,但是什么?
首先,请注意 1.7 不受支持,表单向导在 1.8 中已从 Django 中删除,现在位于第三方 formtools 库中。
这实际上不是表单的工作,而是视图的工作。 SessionWizardView 是一个标准的基于 class 的视图,与大多数基于 class 的视图一样,它允许您覆盖 get_context_data
以将元素添加到模板内容。请参阅 the documentation,其中有一个使用 self.steps.current
检查当前步骤名称的示例。