I guess my strongest objection is that delayed execution like this is hard to predict and control the ordering of.  I think in this case it's probably fine, but I've been bitten the past by needing to order these lazy initializations and having little to no control over it other than forcing them to be "called first" or something wonky like that.

I guess I don't see much difference from just doing this at the module level:

compiled_patterns = [re.compile(pat) for pat in settings.TRACKING_IGNORE_URL_PATTERNS]

Which has similar problems related to the ordering of imports etc.  That said, either solution is probably fine in this case.