Setting up Mimetype when using TemplateView in Django

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"
    ....

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)