SweetAlert integration for Django
Project description
Sweetify - SweetAlert for Django
Sweetify allows you to use SweetAlert or SweetAlert2 for your temporary messages. See the examples below, to see how to use this library
Installation
Note: This package does not provide the client-side files of SweetAlert. You have to provide them yourself.
Install the latest version with pip
:
pip install --upgrade sweetify
Then you have to add sweetify
to your django apps:
INSTALLED_APPS = [
...
'sweetify'
]
Next up you have to specify, in your settings, which library you are using (SweetAlert or SweetAlert2):
# possible options: 'sweetalert', 'sweetalert2' - default is 'sweetalert2'
SWEETIFY_SWEETALERT_LIBRARY = 'sweetalert2'
Next add the following lines to the bottom of your layout/base template:
...
{% load sweetify %}
{% sweetify %}
</body>
</html>
Usage
You can now easily create alerts in your views with any of the following methods provided by Sweetify:
import sweetify
# Base method with no type specified
sweetify.sweetalert(self.request, 'Westworld is awesome', text='Really... if you have the chance - watch it!', persistent='I agree!')
# Additional methods with the type already defined
sweetify.info(self.request, 'Message sent', button='Ok', timer=3000)
sweetify.success(self.request, 'You successfully changed your password')
sweetify.error(self.request, 'Some error happened here - reload the site', persistent=':(')
sweetify.warning(self.request, 'This is a warning... I guess')
We also support toast messages (SweetAlert2 only)
import sweetify
# Base method, default icon is set to success
sweetify.toast(self.request, 'Cheers to new toast')
sweetify.toast(self.request, 'Oops, something went wrong !', icon="error", timer=3000)
sweetify.toast(self.request, 'Persistent toast that only goes away once clicked', icon='warning', persistent="Bye toast!")
Additionally, you can issue multiple alerts without reloading the page ONLY if you are using SweetAlerts 2. To do so, you must define your options in a dictionary:
import sweetify
# Call two consecutive alerts (args1 is the options dict for the first alert and args2 the one for the second alert):
sweetify.multiple(self.request, args1, args2)
# Call five consecutive alerts:
sweetify.multiple(self.request, args1, args2, args3, args4, args5)
Example Usage
import sweetify
def test_view(request):
sweetify.success(request, 'You did it', text='Good job! You successfully showed a SweetAlert message', persistent='Hell yeah')
return redirect('/')
Example usage for multiple alerts:
import sweetify
def test_view(request):
args1 = dict(title='Test1', icon='info', text="Text placeholder1", button="Next")
args2 = dict(title='Test2', icon='success', text="Text placeholder2", timer=5000, timerProgressBar='true', persistent="Close")
sweetify.multiple(request, args1, args2)
return redirect('/')
Replacement for SuccessMessageMixin
Sweetify includes a drop-in replacement for SuccessMessageMixin
.
Just replace the Django mixin with Sweetify's SweetifySuccessMixin
and you are good to go.
from sweetify.views import SweetifySuccessMixin
class TestUpdateView(SweetifySuccessMixin, UpdateView):
model = TestModel
fields = ['text']
success_message = 'TestModel successfully updated!'
Options
By default, all alerts will dismiss after a sensible default number of seconds.
Default options set by Sweetify:
sweetify.DEFAULT_OPTS = {
'showConfirmButton': False,
'timer': 2500,
'allowOutsideClick': True,
'confirmButtonText': 'OK',
}
The following special options provided by Sweetify are available:
# Shows the alert with a button, but will still close automatically
sweetify.sweetalert(self.request, 'Title', button=True)
sweetify.sweetalert(self.request, 'Title', button='Awesome!') # Custom text for the button
# Shows the alert with a button and only closes if the button is pressed
sweetify.sweetalert(self.request, 'Title', persistent=True)
sweetify.sweetalert(self.request, 'Title', persistent='Awesome!') # Custom text for the button
You also can use any other available option that SweetAlert accepts:
sweetify.info(self.request, 'Sweet!', text='Here is a custom image', imageUrl='images/thumbs-up.jpg', timer=5000)
If you use CSP you can use the optional nonce
parameter on the sweetify
tag:
{% load sweetify %}
<!-- static nonce -->
{% sweetify nonce="XYZ" %}
<!-- from request -->
{% sweetify nonce=request.csp_nonce %}
Development
Use the Makefile
to execute common tasks:
- Install dependencies
$ make install
- Run all tests
$ make test
Contributing
Everyone is encouraged to help improve this project. Here are a few ways you can help:
- Report bugs
- Fix bugs and submit pull requests
- Write, clarify, or fix documentation
- Suggest or add new features
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.