import inspect
# changes a view such that it captures specified variables from the URL and sends it to the context
def view_url_vars_to_context(view):
def view_with_uv2c(request, url_vars_to_context = {}, extra_context = {}, *args, **kwargs):
basicargs = inspect.getargspec(view).args
# This is going to prevent some sort of confusion at some point.
if set(url_vars_to_context.keys()) & set(basicargs):
raise ValueError("Context variable names from URL can't be arguments expected by generic view.")
for varname in url_vars_to_context.keys():
if varname not in kwargs.keys():
raise ValueError("URL variable %s does not exist" % varname)
for k in kwargs.keys():
if k in url_vars_to_context:
context_var_name = url_vars_to_context[k]
extra_context[context_var_name] = kwargs[k]
del kwargs[k]
return view(request, extra_context=extra_context, *args, **kwargs)
return view_with_uv2c
Comments