【问题标题】:Django: after submitting the form, why the redirected url is an empty pageDjango:提交表单后,为什么重定向的url是一个空页面
【发布时间】:2015-10-14 10:17:05
【问题描述】:

提交表单(输入)后,它会重定向到另一个页面(结果)。 问题是它确实会转到所需的 url,但内容是空的。 (如果我单独打开它,它不是空的)。提前感谢您的建议。

输入 -- 网址

from inputform import views
from django.views.generic.list import ListView
from inputform.views import input
from django.views.generic import RedirectView
  urlpatterns = patterns('',
    url(r'^result_list/$',ResultView.as_view(),name='result'),
    (r'^input/$', RedirectView.as_view(url='/result_list/')),
      }

输入 --views

from django.http import HttpResponseRedirect
from django.shortcuts import render,render_to_response,get_object_or_404
from inputform.forms import Inputform
from inputform.models import Input
from dupont.models import Result
from django.views.decorators.csrf import csrf_exempt
from django.views.generic.list import ListView

@csrf_exempt

def input(request):
    if request.method == 'POST':
        form = Inputform(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            print (cd['company'])
            form.save()
            return redirect(reverse,('','result_list'))

结果 --views.py

class ResultView(ListView):
    context_object_name = 'result_list'
    template_name = 'result_list.html'
    queryset = Result.objects.all()
 
def get_context_data(self, **kwargs):
        context = super(ResultView, self).get_context_data(**kwargs)
        context['input'] = Input.objects.all()
        return context

结果 -- html

<form action="result_list/" method="post">{% csrf_token %}
<div class="field" >
        <label> Select the Region:
        {{ form.regionlist }}
            {% for region in form.regionlist.choices %}
                 <option value="{{ val }}" {% ifequal data.val val %}selected {% endifequal %}></option>
            {% endfor %}
        </label>
    </div>

<div class="fieldWrapper"> 
    <p><input type="submit" value="Submit" /></p></div>
 </form>

【问题讨论】:

    标签: python html django


    【解决方案1】:

    如 cmets 中所述,传递给 reverse() 的正确参数是“结果”,即 url 的名称。

    如果您使用 django 1.7 或更高版本,您可以跳过反向部分,django 会自动为您完成。

    def input(request):
    if request.method == 'POST':
        form = Inputform(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            print (cd['company'])
            form.save()
            return redirect('result')
    

    应该适合你

    【讨论】:

    • 请注意,重定向快捷方式早在 1.7 之前就处理了 reverse!
    • 你好,我用的是django 1.8,改了上面的代码后,还是重定向到一个空页面,但是单独打开时确定不是空页面。还有其他原因吗?
    • 你能显示其余的代码吗?也许由于某种原因,它返回一个空的 HttpResponse
    • @Resley Rodrigues,嗨~我已经上传了result的代码,html是不完整的,因为它太长了我不想迷惑人们。谢谢。
    • 它可以直接指向所需的url,然后我必须按“Enter”才能显示内容。如果我不按“Enter”,它将只是一个空白页面。这正常吗?
    猜你喜欢
    • 2018-10-31
    • 1970-01-01
    • 2021-12-03
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2014-03-14
    相关资源
    最近更新 更多