Reputation: 1171
In Pyramid, templates are statically assigned to view with
@view_config(renderer='templates/foo.pt')
def my_view(request):
return {'foo':1, 'bar':2}
However, in some cases, we want to set different template for each user. For example, user1
use templates from templates/style1/xxx.pt
and user2
use templates from templates/style2/xxx.pt
. Thus, we need a way to dynamically pass templates to views, instead of configure them statically.
Is there anyway to do the task elegantly?
Upvotes: 3
Views: 381
Reputation: 7613
How about something like this. I have not tested it. I'm pulling from memory :)
Add this to your init.py in your config settings.
config.add_route('my_view', 'my_view/{renderer}')
Use this view:
@view_config(route_name='my_view', renderer='')
def my_view(request):
renderer = request.matchdict['renderer']
data = get_my_data_for_renderer()
return render_to_response(renderer, data, request)
Upvotes: 1
Reputation: 7613
I just did this a couple of days ago.
Here is example code for an ajax call.
@view_config(name="my_view", renderer="")
def my_view(request):
renderer = choose_renderer() #this is where you would dynamically choose what renderer you want. ex "templates/foo.pt"
data = get_my_data_for_renderer
return render_to_response(renderer, data, request)
Here is an example for a normal route call
@view_config(route_name="my_view", renderer="")
def my_view(request):
renderer = choose_renderer() #this is where you would dynamically choose what renderer you want. ex "templates/foo.pt"
data = get_my_data_for_renderer
return render_to_response(renderer, data, request)
Upvotes: 3