Edit: Well my previous suggestions don't work with the fact that
`get_response` has to be called with the correct timezone active.

---

- Is the `time_zone` attribute from `GeoIP2` always compatible with
  `pytz` btw.?

Perhaps the following would work, verifying the cookie value only once
and discarding it if it doesn't fit:

    cookie = request.COOKIES.get(TIMEZONE_COOKIE_NAME)
    if cookie not in pytz.all_timezones_set:
        cookie = None

    if not cookie and request.ip:
        try:
            cookie = GeoIP2().city(request.ip).time_zone
        except GeoIP2Error:
            self.logger.warning('Could not determine time zone of ip address: %s', request.ip)

    if cookie:
        timezone.activate(pytz.timezone(cookie))

    response = self.get_response(request)
    if cookie:
        response.set_cookie(TIMEZONE_COOKIE_NAME, cookie)
    return response

So, downside is a lot of mentions of `cookie`, upside is that it's not
more costly what you had before and the timezone is only set once.

---

Last point, if anything like this happens to be needed more than once,
put it into separate functions.  This snippet is a bit short to make
that call.