I don't really see why you need to pass the model as a string - just pass the model reference. E.g.
class ModelA(models.Model):
...
class ModelB(models.Model):
...
def reference_context(model, **kw):
menu = main_menu()
info = company_info()
pages = get_list_or_404(model, **kw)
# ...
In this setup you can pass any model and any query you want, e.g.
reference_context(ModelA, category="Hello")
or
reference_context(ModelB, item__ordered__lte=now)
As explained in my comment, if you really need to map strings to models, use an explicit registry/mapping. This prevents people from manipulating form data which might allow them to create a User in stead of, for example, a "Book":
model_map = dict(book=ModelA, magazine=ModelB)
reference_context(model_map[model_as_string], ...)