Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting up Mimetype when using TemplateView in Django

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"

like image 464
rrb_bbr Avatar asked Jul 29 '11 00:07

rrb_bbr


1 Answers

For Django >= 1.5

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')), 

For Django < 1.5

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'), ) 

Using a Mixin

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'     .... 
like image 60
sacabuche Avatar answered Sep 19 '22 11:09

sacabuche