【发布时间】:2015-08-10 01:36:32
【问题描述】:
我正在尝试将表单发布重定向回发布它的页面。所以我的应用程序有一个详细信息页面,显示有关地点的信息,/arena/123,在同一页面上,用户可以输入一些关于他们正在查看的当前地点的 cmets 或评级。这些是我的视图函数。
class DetailView(LoginRequiredMixin, generic.DetailView):
model = Arena
template_name = 'arenas/detail.html'
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
if 'form' not in context:
print 'no form in context'
context['form'] = RatingForm
return context
def rate(request):
if request.method == 'POST':
form = RatingForm(request.POST)
if form.is_valid():
# post was valid. go back to page and display data
return DetailView.as_view()(request(), form=RatingForm)
else:
# post was unsuccessful. go back to the page and display errors
print form.errors
return DetailView.as_view()(request(), form=form)
还有我的模板
{% extends "base.html" %}
{% block content %}
<h1>{{ arena.address }}</h1>
<h1>{{ arena.address_2 }}</h1>
<h1>{{ arena.phone }}</h1>
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-error">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-error">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
<form action="/arenas/rate/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" />
</form>
<div>
{{comments}}
</div>
{% endblock %}
所以我想做的是,在用户在页面上提交表单后,我想返回到我所在的同一详细信息页面,或者在 cmets 部分中显示用户在那里发布的数据如果它成功或重定向回同一页面,但如果它不成功,则会出现表单错误。我的问题是现在我不知道如何保留 url 和表单错误以再次显示详细信息页面。我认为我不能使用return DetailView.as_view()(context(), form=form),因为我的 DetailView 没有帖子,所以我得到了 405。我看到的每个示例都不包括重定向回同一页面。他们通常只显示HttpResponseRedirect(/thanks) 或类似的东西。
还要注意。我不想发布到 /arena/123,因为最终这将是更新该地点信息的另一个功能,所以我不想将 cmets 发布到该 URL 上。
【问题讨论】: