django display message after POST form submit

前端 未结 5 1658
天涯浪人
天涯浪人 2020-12-24 07:17

I have a page with a POST form, that have a action set to some url.
i.e assume this page url is /form_url/ : ..

The view in /sub

相关标签:
5条回答
  • 2020-12-24 07:52

    For Class Based Views use self.request

    I also use self.request.path_info in my return

    from django.contrib import messages
    
    class MyCreateView(CreateView):
        ...
           def form_valid(self, form):
              ....
              self.object.save()
    
              messages.success(self.request, 'Form submission successful')
              
              return HttpResponseRedirect(self.request.path_info)
    

    Same template as damio's answer:

    {% if messages %}
    <ul class="messages">
        {% for message in messages %}
        <li  {% if message.tags %} class=" {{ message.tags }} " {% endif %}> {{ message }} </li>
        {% endfor %}
    </ul>
    {% endif %}
    
    0 讨论(0)
  • 2020-12-24 07:54
    from django.contrib.messages.views import SuccessMessageMixin
    from django.views.generic.edit import CreateView 
    from myapp.models import Author
    
    class AuthorCreate(SuccessMessageMixin, CreateView):
        model = Author
        success_url = '/success/'
        success_message = "%(name)s was created successfully"
    

    https://docs.djangoproject.com/en/1.11/ref/contrib/messages/

    0 讨论(0)
  • 2020-12-24 08:05

    You don't need to do a redirect to clear the form data. All you need to do is re-instantiate the form:

    def your_view(request):
        form = YourForm(request.POST or None)
        success = False
        if request.method == 'POST':
            if form.is_valid():
                form.save()
                form = YourForm()
                success = True
        return render(request, 'your_template.html', {'form': form})
    

    If the user refreshes the page, they're going to initiate a GET request, and success will be False. Either way, the form will be unbound on a GET, or on a successful POST.

    If you leverage the messages framework, you'll still need to add a conditional in the template to display the messages if they exist or not.

    0 讨论(0)
  • 2020-12-24 08:09

    Django messages framework stores the messages in the session or cookie (it depends on the storage backend).

    0 讨论(0)
  • 2020-12-24 08:10

    The django admin uses django.contrib.messages, you use it like this:

    In your view:

    from django.contrib import messages
    
    def my_view(request):
        ...
           if form.is_valid():
              ....
              messages.success(request, 'Form submission successful')
    

    And in your templates:

    {% if messages %}
    <ul class="messages">
        {% for message in messages %}
        <li  {% if message.tags %} class=" {{ message.tags }} " {% endif %}> {{ message }} </li>
        {% endfor %}
    </ul>
    {% endif %}
    
    0 讨论(0)
提交回复
热议问题