Django 2中的POST方法后如何重定向到成功

时间:2018-07-20 08:49:06

标签: django url views message

我想知道如何从FormView类处理GETPOST请求,以为GET呈现未绑定的表单,并为{{1 }},然后重定向到成功页面(信息消息)。

用于POSTGET方法的模板以及重定向到成功URL后如何包含消息?

views.py:

POST

urls.py:

from django.shortcuts import render,redirect,render_to_response,get_object_or_404
from django.forms import ModelForm
from django.views import View

from django.views.generic.edit import CreateView
from .forms import MyPlaceForm
from .models import Place
from django.urls.base import reverse_lazy


from django.contrib import messages


#Ceate your class-based views here.
class MapView(View):
    def get(self, request):
        'Display map'
        return render(request,template_name='index.html')

# Handling forms with class-based view
class PlaceFormView(View):
    form_class = MyPlaceForm
    initial = {'key': 'value'}
    template_name = 'name.html'

    # Provide Blank Form if GET request
    def get(self, request, *args, **kwargs):
        form = self.form_class(initial=self.initial)
        return render(request, self.template_name, {'form': form})

# Provide a message if POST request
    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        success_url=reverse_lazy('success')
        if form.is_valid():
            # <process form cleaned data>

            messages.add_message(request, messages.INFO, 'Hello world.')
            return reverse_lazy(success_url)

        return render(request, self.template_name, {'form': form})

1 个答案:

答案 0 :(得分:0)

documentation之后,您可以执行以下操作:

# views.py    
if request.method == "POST":

    if form.is_valid():

        # <process form cleaned data>
        messages.success(request, 'Form updated with success.')
        return redirect('/success-page')

    else:       
        messages.error(request, 'Ops! Something went wrong')
        return redirect('/error-page')

在模板页面中,您可以使用for循环代码获取消息:

{% if messages %}
{% for message in messages %}
<div {% if message.tags %} class="alert alert-{{ message.tags }} alert-dismissible fade show" {% endif %}>
    <span>{{ message }}</span>
</div>
{% endfor %}
{% endif %}

Edit1 :确保已导入message标签并在视图中重定向。py

from django.contrib import messages
from django.shortcuts import render, redirect