# Django 6.0.5 documentation

# `TemplateResponse` och `SimpleTemplateResponse`

Standard `HttpResponse`-objekt är statiska strukturer. De förses med ett block av förrenderat innehåll vid konstruktionstillfället, och även om detta innehåll kan ändras är det inte i en form som gör det enkelt att utföra ändringar.

Ibland kan det dock vara fördelaktigt att låta dekoratorer eller mellanprogram modifiera ett svar efter att det har konstruerats av vyn. Du kanske t.ex. vill ändra den mall som används eller lägga in ytterligare data i kontexten.

TemplateResponse tillhandahåller ett sätt att göra just det. Till skillnad från grundläggande `HttpResponse`-objekt behåller TemplateResponse-objekt detaljerna i mallen och sammanhanget som tillhandahölls av vyn för att beräkna svaret. Den slutliga utgången av svaret beräknas inte förrän den behövs, senare i svarsprocessen.

## objekt av typen ``SimpleTemplateResponse

class SimpleTemplateResponse

### Attribut

SimpleTemplateResponse.template_name

  The name of the template to be rendered. Accepts a backend-dependent template object (such as those returned by `get_template()`), the name of a template, or a list of template names.

  Exempel: `['foo.html', 'path/to/bar.html']`

SimpleTemplateResponse.context_data

  De kontextdata som ska användas när mallen renderas. Det måste vara en `dict`.

  Exempel: `{'foo': 123}`

SimpleTemplateResponse.rendered_content

  Det aktuella renderade värdet av svarsinnehållet, med hjälp av den aktuella mallen och kontextdata.

SimpleTemplateResponse.is_rendered

  Ett boolean som anger om svarsinnehållet har återgivits.

### Metoder

SimpleTemplateResponse.__init__(template, context=None, content_type=None, status=None, charset=None, using=None, headers=None)

  Instansierar ett `SimpleTemplateResponse`-objekt med den angivna mallen, kontexten, innehållstypen, HTTP-statusen och teckenuppsättningen.

  `mall`

    A backend-dependent template object (such as those returned by `get_template()`), the name of a template, or a list of template names.

  `kontext`

    En `dict` med värden som ska läggas till i mallkontexten. Som standard är detta en tom ordbok.

  `innehållstyp`

    Det värde som ingår i HTTP-rubriken `Content-Type`, inklusive specifikationen för MIME-typen och teckenkodningen. Om `content_type` anges, används dess värde. I annat fall används `'text/html`.

  `status`

    HTTP-statuskoden för svaret.

  `teckensnittsuppsättning`

    Den teckenuppsättning som svaret kommer att kodas med. Om det inte anges kommer det att extraheras från `content_type`, och om det inte lyckas kommer inställningen `DEFAULT_CHARSET`` att användas.

  `använder`

    `NAME` för en mallmotor som ska användas för att ladda mallen.

  `headers`

    En `dict` av HTTP-rubriker som ska läggas till i svaret.

SimpleTemplateResponse.resolve_context(context)

  Förbehandlar kontextdata som kommer att användas för att rendera en mall. Accepterar en `dict` av kontextdata. Returnerar som standard samma `dict`.

  Åsidosätt denna metod för att anpassa sammanhanget.

SimpleTemplateResponse.resolve_template(template)

  Resolves the template instance to use for rendering. Accepts a backend-dependent template object (such as those returned by `get_template()`), the name of a template, or a list of template names.

  Returnerar den backend-beroende mallobjektinstansen som ska renderas.

  Åsidosätt denna metod för att anpassa laddning av mallar.

SimpleTemplateResponse.add_post_render_callback()

  Lägg till en callback som kommer att anropas efter att rendering har ägt rum. Den här hook kan användas för att skjuta upp vissa bearbetningsoperationer (t.ex. cachelagring) till efter att renderingen har ägt rum.

  Om `SimpleTemplateResponse` redan har renderats, kommer återuppringningen att anropas omedelbart.

  När callbacks anropas kommer de att få ett enda argument - den renderade `SimpleTemplateResponse`-instansen.

  Om återuppringningen returnerar ett värde som inte är `None`, kommer detta att användas som svar i stället för det ursprungliga svarsobjektet (och kommer att skickas till nästa återuppringning av postrendering etc.)

SimpleTemplateResponse.render()

  Sätter `response.content` till det resultat som erhålls genom `SimpleTemplateResponse.rendered_content`, kör alla callbacks efter rendering och returnerar det resulterande svarsobjektet.

  `render()` kommer bara att ha effekt första gången den anropas. Vid efterföljande anrop returneras det resultat som erhölls vid det första anropet.

## objekt av typen ``TemplateResponse

class TemplateResponse

  `TemplateResponse` är en underklass till `SimpleTemplateResponse`` som känner till den aktuella `HttpRequest``.

### Metoder

TemplateResponse.__init__(request, template, context=None, content_type=None, status=None, charset=None, using=None, headers=None)

  Instansierar ett `TemplateResponse`-objekt med den angivna begäran, mallen, kontexten, innehållstypen, HTTP-statusen och teckenuppsättningen.

  `begäran`

    En `HttpRequest`-instans.

  `mall`

    A backend-dependent template object (such as those returned by `get_template()`), the name of a template, or a list of template names.

  `kontext`

    En `dict` med värden som ska läggas till i mallkontexten. Som standard är detta en tom ordbok.

  `innehållstyp`

    Det värde som ingår i HTTP-rubriken `Content-Type`, inklusive specifikationen för MIME-typen och teckenkodningen. Om `content_type` anges, används dess värde. I annat fall används `'text/html`.

  `status`

    HTTP-statuskoden för svaret.

  `teckensnittsuppsättning`

    Den teckenuppsättning som svaret kommer att kodas med. Om det inte anges kommer det att extraheras från `content_type`, och om det inte lyckas kommer inställningen `DEFAULT_CHARSET`` att användas.

  `använder`

    `NAME` för en mallmotor som ska användas för att ladda mallen.

  `headers`

    En `dict` av HTTP-rubriker som ska läggas till i svaret.

## Renderingsprocessen

Innan en instans av `TemplateResponse` kan returneras till klienten måste den renderas. Renderingsprocessen tar den mellanliggande representationen av mall och kontext och förvandlar den till den slutliga byte-strömmen som kan serveras till klienten.

Det finns tre omständigheter under vilka ett `TemplateResponse` kommer att återges:

- When the `TemplateResponse` instance is explicitly rendered, using the `SimpleTemplateResponse.render()` method.

- När innehållet i svaret uttryckligen anges genom att tilldela `response.content`.

- Efter att ha passerat genom middleware för mallsvar, men innan den passerar genom middleware för svar.

En `TemplateResponse` kan bara renderas en gång. Det första anropet till `SimpleTemplateResponse.render()` anger svarets innehåll; efterföljande renderingsanrop ändrar inte svarets innehåll.

Men när `response.content` uttryckligen tilldelas tillämpas ändringen alltid. Om du vill tvinga innehållet att återskapas kan du omvärdera det återskapade innehållet och tilldela innehållet i svaret manuellt:

    # Set up a rendered TemplateResponse
    >>> from django.template.response import TemplateResponse
    >>> t = TemplateResponse(request, "original.html", {})
    >>> t.render()
    >>> print(t.content)
    Original content

    # Re-rendering doesn't change content
    >>> t.template_name = "new.html"
    >>> t.render()
    >>> print(t.content)
    Original content

    # Assigning content does change, no render() call required
    >>> t.content = t.rendered_content
    >>> print(t.content)
    New content

### Återkallelser efter rendering

Vissa åtgärder - t.ex. cachelagring - kan inte utföras på en mall som inte är renderad. De måste utföras på ett helt komplett och renderat svar.

Om du använder middleware kan du göra det. Middleware ger flera möjligheter att bearbeta ett svar vid avslut från en vy. Om du lägger in ett beteende i svarsmellanvaran är det garanterat att det körs efter att mallrenderingen har ägt rum.

Men om du använder en dekorator finns inte samma möjligheter. Alla beteenden som definieras i en dekorator hanteras omedelbart.

För att kompensera för detta (och andra liknande användningsfall) kan du i `TemplateResponse` registrera callbacks som anropas när renderingen har slutförts. Med hjälp av denna callback kan du skjuta upp kritisk bearbetning till en punkt där du kan garantera att renderat innehåll kommer att vara tillgängligt.

För att definiera en återuppringning efter rendering definierar du en funktion som tar ett enda argument – response – och registrerar funktionen med mallen response:

    from django.template.response import TemplateResponse

    def my_render_callback(response):
        # Do content-sensitive processing
        do_post_processing()

    def my_view(request):
        # Create a response
        response = TemplateResponse(request, "mytemplate.html", {})
        # Register the callback
        response.add_post_render_callback(my_render_callback)
        # Return the response
        return response

`my_render_callback()` kommer att anropas efter att `mytemplate.html` har renderats, och kommer att få den fullständigt renderade `TemplateResponse`-instansen som argument.

Om mallen redan har renderats kommer återuppringningen att anropas omedelbart.

## Använda `TemplateResponse` och `SimpleTemplateResponse`

A `TemplateResponse` object can be used anywhere that a normal `django.http.HttpResponse` can be used. It can also be used as an alternative to calling `render()`.

Följande vy returnerar till exempel en `TemplateResponse` med en mall och en kontext som innehåller en frågeuppsättning:

    from django.template.response import TemplateResponse

    def blog_index(request):
        return TemplateResponse(
            request, "entry_list.html", {"entries": Entry.objects.all()}
        )