Redirecting#

Unicorn has a few different ways to redirect from an action method.

Redirect#

To redirect the user, return a HttpResponseRedirect from an action method. Using the Django shortcut redirect method is one way to do that in a typical Django manner.

Note

django.shortcuts.redirect can take a Django model, Django view name, an absolute url, or a relative url. However, the permanent kwarg for redirect has no bearing in this context.

Tip

It is not required to use django.shortcuts.redirect. Anything that returns a HttpResponseRedirect will behave the same in Unicorn.

# redirect.py from django.shortcuts import redirect from django_unicorn.components import UnicornView from .models import Book class BookView(UnicornView): title = "" def save_book(self): book = Book(title=self.title) book.save() self.reset() return redirect(f"/book/{book.id}") 
<!-- redirect.html --> <div> <input unicorn:model="title" type="text" id="title" /><br /> <button unicorn:click="save_book()">Save book</button> </div> 

HashUpdate#

To avoid a server-side page refresh and just update the hash at the end of the url, return HashUpdate from the action method.

# hash_update.py from django_unicorn.components import HashUpdate, UnicornView from .models import Book class BookView(UnicornView): title = "" def save_book(self): book = Book(title=self.title) book.save() self.reset() return HashUpdate(f"#{book.id}") 
<!-- hash-update.html --> <div> <input unicorn:model="title" type="text" id="title" /><br /> <button unicorn:click="save_book()">Save book</button> </div> 

LocationUpdate#

To avoid a server-side page refresh and update the whole url, return a LocationUpdate from the action method.

LocationUpdate is instantiated with a HttpResponseRedirect arg and an optional title kwarg.

Note

LocationUpdate uses window.history.pushState so the new url must be relative or the same origin as the original url.

# location_update.py from django.shortcuts import redirect from django_unicorn.components import LocationUpdate, UnicornView from .models import Book class BookView(UnicornView): title = "" def save_book(self): book = Book(title=self.title) book.save() self.reset() return LocationUpdate(redirect(f"/book/{book.id}"), title=f"{book.title}") 
<!-- location-update.html --> <div> <input unicorn:model="title" type="text" id="title" /><br /> <button unicorn:click="save_book()">Save book</button> </div>