<p>你发布的代码确实有很多错误。你知道吗</p>
<p>得到405是因为索引模板中的表单试图直接发布到详细信息URL,而该URL未设置为接受post请求。这样做的另一个问题是表单不会被验证,因为验证应该在IndexView中进行,而不是在DetailView中。另外,DetailView对表单一无所知,因此<code>form.cleaned_data</code>将不存在于模板上下文中;而且Django模板语法不支持通过方括号进行字典查找,因此<code>{{ form.cleaned_data['dateDataInicial'] }}</code>将不起作用。你知道吗</p>
<p>为了使验证生效,您需要将表单提交回IndexView,然后IndexView将重定向到detail视图。(代码的另一个问题是success\u url应该是一个url,而不是模板路径。)然后问题就变成了如何从一个视图到另一个视图获取数据;会话是一种很好的方法。所以:</p>
<pre><code>class IndexView(generic.FormView):
template_name = 'dutos/index.html'
form_class = GetDate
success_url = reverse_lazy('detail')
def form_valid(self, form):
self.request.session['dates'] = form.cleaned_data
return super.form_valid(form)
</code></pre>
<p>在中更改窗体标记索引.html地址:</p>
<pre><code> <form action="" method="post">
</code></pre>
<p>局部视图:</p>
<pre><code>class DetailView(generic.DetailView):
model = Dutos
template_name = 'dutos/detail.html'
def get_context_data(self, **kwargs):
kwargs['dates'] = self.request.session.pop('dates', {})
return super().get_context_data(**kwargs)
</code></pre>
<p>而且在详细信息.html地址:</p>
<pre><code>{{ dates.dateDataInicial }}
{{ dates.dateDataFinal }}
</code></pre>