adding ability to change content type when overriding template
This commit is contained in:
@@ -41,8 +41,10 @@ request = proxy('request')
|
||||
response = proxy('response')
|
||||
|
||||
|
||||
def override_template(template):
|
||||
def override_template(template, content_type=None):
|
||||
request.override_template = template
|
||||
if content_type:
|
||||
request.override_content_type = content_type
|
||||
|
||||
def abort(status_code=None, detail='', headers=None, comment=None):
|
||||
raise exc.status_map[status_code](detail=detail, headers=headers, comment=comment)
|
||||
@@ -290,7 +292,10 @@ class Pecan(object):
|
||||
|
||||
# pull the template out based upon content type and handle overrides
|
||||
template = cfg.get('content_types', {}).get(state.content_type)
|
||||
|
||||
# check if for controller override of template
|
||||
template = getattr(request, 'override_template', template)
|
||||
state.content_type = getattr(request, 'override_content_type', state.content_type)
|
||||
|
||||
# if there is a template, render it
|
||||
if template:
|
||||
|
||||
@@ -3,7 +3,7 @@ from paste.recursive import ForwardRequestException
|
||||
from unittest import TestCase
|
||||
from webtest import TestApp
|
||||
|
||||
from pecan import Pecan, expose, request, response, redirect, abort, make_app
|
||||
from pecan import Pecan, expose, request, response, redirect, abort, make_app, override_template
|
||||
from pecan.templating import _builtin_renderers as builtin_renderers
|
||||
|
||||
import os
|
||||
@@ -620,3 +620,15 @@ class TestEngines(object):
|
||||
assert r.status_int == 200
|
||||
result = dict(loads(r.body))
|
||||
assert result == expected_result
|
||||
|
||||
def test_override_template(self):
|
||||
class RootController(object):
|
||||
@expose('foo.html')
|
||||
def index(self):
|
||||
override_template(None, content_type='text/plain')
|
||||
return 'Override'
|
||||
|
||||
app = TestApp(Pecan(RootController()))
|
||||
r = app.get('/')
|
||||
assert r.status_int == 200
|
||||
assert 'Override' in r.body
|
||||
|
||||
Reference in New Issue
Block a user