Difference between reverse() and reverse_lazy() in Django

RyuCoder picture RyuCoder · Feb 7, 2018 · Viewed 10.1k times · Source

I understand that we can use reverse() in FBV and reverse_lazy() in CBV. I understand that we have to use reverse_lazy() in CBV as the urls are not loaded when the file is imported (Ref: Reverse_lazy and URL Loading?)

What I don't understand is:

How are the urls loaded when we call reverse from the FBV? As when we import the views at the top of the urls.py in a Django app, urlpatterns list is yet to be evaluated. How does reverse() for FBV work but not for CBV?

Answer

CoffeeBasedLifeform picture CoffeeBasedLifeform · Feb 7, 2018
#importme.py
def a():
    print("FUNCTION HELLO")

class B():
    print("CLASS HELLO") 


>>> import importme
>>> CLASS HELLO

Class attributes are evaluated on import. The answer to when or exactly how that happens, resides within the depths of python's import system.