Does anyboy know how do I set the desired mimetype when using TemplateView, as in:
urlpatterns = patterns('', url(r'^test\.txt$', TemplateView.as_view(template_name='staticpages/test.html')),
In this case, I want to set the mimtype as "text/plain"
TemplateView accepts a content_type argument.
Coping example from @Meilo
urlpatterns = patterns('', url(r'^test\.txt$', TemplateView.as_view(template_name='staticpages/test.html', content_type='text/plain')),
I think that just calling TemplateView.as_view() is not posible but maybe i missed it (from the source), but you can do your own class
class TextTemplateView(TemplateView): def render_to_response(self, context, **response_kwargs): response_kwargs['content_type'] = 'text/plain' return super(TemplateView, self).render_to_response(context, **response_kwargs)
You can take a look to:
django.template.response => TemplateResponse
django.views.generic.base => TemplateView
And if you need something more dynamic:
from django.utils.decorators import classonlymethod class ContentTypeTemplateView(TemplateView): @classonlymethod def as_view(cls, content_type='text/plain', **initargs): setattr(cls, 'content_type', content_type) return super(ContentTypeTemplateView, cls).as_view(**initargs) def render_to_response(self, context, **response_kwargs): response_kwargs['content_type'] = self.content_type return super(ContentTypeTemplateView, self).render_to_response(context, **response_kwargs) urlpatterns = patterns('', url(r'^$', ContentTypeTemplateView.as_view(content_type='text/plain', template_name='staticpages/test.html'), name='index'), )
from django.core.exceptions import ImproperlyConfigured class ContentTypeMixin(object): content_type = None def render_to_response(self, context, **response_kwargs): if not self.content_type: raise ImproperlyConfigured( "MimeTypeMixin rquires a definition of content_type") response_kwargs['content_type'] = self.content_type return super(ContentTypeMixin, self).render_to_response(context, **response_kwargs) class MyTxtView(ContentTypeMixin, TemplateView): content_type = 'text/plain' ....
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With