Django passing variables to templates from class based views

前端 未结 4 1134
太阳男子
太阳男子 2020-12-09 08:59

If I have a class based view, like this,

class SomeView (View):
    response_template=\'some_template.html\'
    var1 = 0
    var2 = 1

    def get(self, re         


        
4条回答
  •  忘掉有多难
    2020-12-09 09:36

    A cleaner way of doing this could be to replicate Django's Template view:

    class TemplateView(TemplateResponseMixin, ContextMixin, View):
        """
        A view that renders a template.  This view will also pass into the context
        any keyword arguments passed by the url conf.
        """
        def get(self, request, *args, **kwargs):
            context = self.get_context_data(**kwargs)
            return self.render_to_response(context)
    

    and then adding it to the get_context_data function. Or you could simply use the TemplateView which will allow you to specify a template name and then you could override the get_context_data function:

    class SomeView(generic.TemplateView):
        var1 = 0
        var2 = 1 
        template_name = 'some_template.html'
    
        def get_context_data(self, **kwargs):
            context = super(SomeView, self).get_context_data(**kwargs)
            context.update({'var1': self.var1, 'var2': self.var2})
            return context
    

    EDIT

    Django has generic views which you can use for a variety of things, I would strongly advise you to go look at the docs for a full list of them, These generic views have functions you can override to do custom things which aren't supported by default. In your case you just wanted a template with context variables on them which means you subclass the TemplateView and supply the template_name and then finally you can override the get_context_data function to add your context data and that would be all there is to it, the second piece of code would be all you need in your case.

提交回复
热议问题