【问题标题】:Issues redirecting in Django在 Django 中重定向问题
【发布时间】:2018-07-19 11:27:52
【问题描述】:

我正在部署一个 django 应用程序,我有两种形式:一种用于评分,另一种用于主页中的联系人。保存模型后,它们都重定向到主页。联系表格工作正常,但评分表格保留帖子网址并且不保存模型,再次保存后,它会保存它。 例如,我在 www.site.com,然后我从评级表单发送一个发布请求,表单将我重定向到 www.site.com/rating/ 而不保存数据。然后,如果我从 www.site.com/rating/ 发送相同的表格,数据将被保存并重定向到 www.site.com/rating/rating/ (404)。联系表格可以在相同的过程中正常工作,我认为两者都是相似的。联系表格将我重定向到我想要的 www.site.com。我不知道为什么会这样。 urls.py

urlpatterns = i18n_patterns(
    url(r'^admin/', admin.site.urls),
    url(r'^i18n/', include('django.conf.urls.i18n')),
    url(r'^', include('myapp.urls')),
    prefix_default_language=False
)

myapp/urls.py

urlpatterns = [
    url(r'^contact/', views.contact, name='contact'),
    url(r'^rating/', views.raiting, name='rating'),
    url(r'^', views.index, name='home'),
]

myapp/views.py

def contact(request):
    if request.method != 'POST':
        raise Http404('acceding from GET')

    msg = ContactForm(request.POST)
    if not msg.is_valid():
        context = {
            'contact_errors': msg.errors
        }
        return render(request, 'home.html', context)
    msg.save()
    return redirect('home')


def rating(request):
    if request.method != 'POST':
        raise Http404('acceding from GET')

    msg_form = OpinionForm(request.POST)
    if not msg_form.is_valid():
        context = {
            'rating_errors': msg_form.errors
        }
        return render(request, 'home.html', context)
    msg = msg_form.save(commit=False)
    if 'picture' in request.FILES:
        msg.picture = request.FILES['picture']
    msg.save()
    return redirect('home')

home.html 中的表单

<form action="{% url 'rating' %}" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input name="name" type="text" class="form-control" placeholder="Your name" required>
    <textarea name="text" id="" cols="30" rows="5" class="form-control" placeholder="Your comment" required></textarea>
    <input name="picture" type="file" id="upload-photo">
    <input type="submit" class="button" value="Send"> 
</form>

<form action="{% url 'contact' %}" method="post">
    {% csrf_token %}
    <input name="email" type="text" class="form-control" placeholder="Email" required>
    <textarea name="message" id="" cols="30" rows="5" class="form-control" required placeholder="Your message"></textarea>
    <input type="submit" class="button" value="Send">
</form>

【问题讨论】:

  • 第一次提交时检查评分表是否真的有效。可能是表单无效,然后模板的表单操作属性将您发送到site/rating,然后表单有效并且表单操作通过将您发送到site/rating/rating 再次执行此操作。
  • 我查过了,表格有效

标签: python django url redirect


【解决方案1】:

我猜这是一个错字,但请检查您的 urls.py:

url(r'^rating/', views.raiting, name='rating'),

应该是评分而不是评分,对吧?

【讨论】:

    猜你喜欢
    • 2012-10-07
    • 2010-11-05
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 2018-05-22
    • 1970-01-01
    相关资源
    最近更新 更多