gpt4 book ai didi

python - 在 Django 上保存表单后重定向

转载 作者:太空狗 更新时间:2023-10-30 02:30:09 24 4
gpt4 key购买 nike

我正在努力扩展我们在完成官方 Django 教程后留下的 webapp。

我希望添加的功能之一是让用户能够自己添加投票。

我正在努力让页面处理数据,然后重定向到索引页面('/polls')。

当我以登录用户的身份提交新的民意调查时,我将返回到我的索引页面,该页面应该显示最近发布的民意调查,或者如果没有民意调查,则会显示消息“没有可用的民意调查”。

出于某种原因,我总是看到“没有可用的民意调查”,但是一旦我通过网站上的链接单击索引页面,它就会显示我所有的民意调查,包括我最近创建的一个,数据完好无损!

这里有什么想法吗?我想我已经在下面包含了相关信息,但很乐意提供更多信息。在此先感谢您的任何帮助/建议。

View .py

class IndexView(generic.ListView):
template_name = 'polls/index.html'
context_object_name = 'latest_question_list'

def get_queryset(self):
"""Return the last five published questions."""
return Poll.objects.order_by('-pub_date')[:15]

@login_required
def add_poll(request):
ChoiceFormSet = formset_factory(ChoiceForm, extra=3, min_num=2, validate_min=2)

if request.method == 'POST':
form = PollForm(request.POST)
formset = ChoiceFormSet(request.POST)
if all([form.is_valid(), formset.is_valid()]):
poll = form.save()
for inline_form in formset:
if inline_form.cleaned_data:
choice = inline_form.save(commit=False)
choice.question = poll
choice.save()
return render(request, 'polls/index.html', {})
else:
form = PollForm()
formset = ChoiceFormSet()

return render(request, 'polls/add_poll.html', {'form': form, 'formset': formset})

add_poll.html

{% extends 'polls/base.html' %}

{% block title %}Add Poll{% endblock %}

{% block body_block %}
<form role="form" id="poll_form" method="post" action="{% url 'polls:add_poll' %}">
<h2 class="form-signin-heading">Add a Poll</h2>

{% csrf_token %}

<table>
{{ form }}
{{ formset }}
</table>

<br/>

<button class="btn btn-primary" type="submit" name="submit">Create Poll</button>

</form>

{% endblock %}

index.html

{% extends 'polls/base.html' %}

{% block body_block %}
{% if latest_question_list %}
<ul>
{% for poll in latest_question_list %}
<li><a href="{% url 'polls:detail' poll.id %}">{{ poll.question_text }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}
{% endblock %}

网址.py

from django.conf.urls import patterns, url

from . import views

urlpatterns = patterns('',
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail'),
url(r'^(?P<pk>\d+)/results/$', views.ResultsView.as_view(), name='results'),
url(r'^add_poll/$', views.add_poll, name='add_poll'),
url(r'^(?P<question_id>\d+)/vote/$', views.vote, name='vote'),
url(r'^profile_page/$', views.ProfileView.as_view(), name='profile_page'),
url(r'^edit_profile/$', views.edit_profile, name='edit_profile'),
)

最佳答案

当您保存表单时,您并没有重定向。

您返回的 'polls/index.html' 带有空的 polls 数据,这就是为什么您总是得到“没有可用的民意调查”的原因。但这是非常不正确的,必须按照Post/Redirect/Get (PRG)模式,所以不是:

return render(request, 'polls/index.html', {})

这样做:

return HttpResponseRedirect(reverse('polls:index'))

关于python - 在 Django 上保存表单后重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28841447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com