Django - 表单提交没有重定向

时间:2017-08-10 00:15:02

标签: python django forms redirect

我正在努力弄清楚为什么简单的表单重定向不起作用。我通过POST请求提交一个带有一个文本字段的表单,该表单与来自相同views.py文件中的函数的一些数据相结合,然后将其保存到数据库上的模型中。出于某种原因,使用我在提交表单时设置的重定向方案,我得到了表单的第二个副本。

feedbackapp/views.py

from django.shortcuts import render, redirect
from django.http import HttpResponseRedirect
from django.urls import reverse

from .forms import FeedbackForm
from .models import Feedback


def record_feedback(request):
    if request.method == 'POST':
        form = FeedbackForm(request.POST)
        if form.is_valid():
            feedback = Feedback()
            feedback.submitter_ip = get_client_ip(request)
            feedback.feedback_text = form.cleaned_data['feedback']
            feedback.save()
            return HttpResponseRedirect(reverse('feedbackapp:thanks'))

    elif request.method == 'GET':
        form = FeedbackForm()
        return render(request, 'feedbackapp/feedback_form.html', {'form': form})


def thanks(request):
    return render(template_name='feedbackapp/thanks.html',request=request)


# https://stackoverflow.com/questions/4581789/how-do-i-get-user-ip-address-in-django
def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[-1] # needs to be the last element in array for Heroku
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip

feedbackapp/forms.py

from django import forms


class FeedbackForm(forms.Form):
    feedback = forms.CharField(label='Feedback', max_length=5000)

feedbackapp/templates/feedbackapp/feedback_form.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Anonymous Feedback</title>
</head>
<body>
    <form action="/" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="Submit"/>
    </form>
    <p><i>Note: IP addresses are collected with each submission.</i></p>
</body>
</html>

feedbackapp/templates/feedbackapp/thanks.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Thanks!</title>
</head>
<body>
<p>Thanks for your feedback.</p>
</body>
</html>

feedbackapp/urls.py

from django.conf.urls import url
from .views import record_feedback, thanks


urlpatterns = [
    url('', record_feedback, name='feedback'),
    url('thanks/', thanks, name='thanks'),
]

anonfeed/urls.py

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url('', include('feedbackapp.urls'), namespace='feedbackapp'),
]

几乎就好像thanks视图没有与网址和模板相关联。

1 个答案:

答案 0 :(得分:1)

您的空正则表达式会覆盖thanks的空正则表达式。更改以下行:

url('', record_feedback, name='feedback'),

url('^$', record_feedback, name='feedback'),