Inbyggda malltaggar och filter¶
Detta dokument beskriver Djangos inbyggda malltaggar och filter. Det rekommenderas att du använder automatisk dokumentation, om tillgängligt, eftersom detta också kommer att innehålla dokumentation för eventuella anpassade taggar eller filter som installerats.
Inbyggd taggreferens¶
autoescape
¶
Styr det aktuella auto-escaping-beteendet. Denna tagg tar antingen on
eller off
som argument och avgör om auto-escaping är i kraft inuti blocket. Blocket stängs med en endautoescape
sluttagg.
Exempel på användning:
{% autoescape on %}
{{ body }}
{% endautoescape %}
När automatisk eskapning används, tillämpas HTML-eskapning på allt innehåll som härrör från variabler innan resultatet placeras i utdata (men efter att eventuella filter har tillämpats). Detta motsvarar att manuellt tillämpa filtret escape
på varje variabel.
De enda undantagen är variabler som redan markerats som ”säkra” från escaping. Variabler kan vara markerade som ”säkra” av koden som fyllde i variabeln, genom att tillämpa filtren safe
eller escape
, eller för att det är resultatet av ett tidigare filter som markerade strängen som ”säker”.
Inom ramen för inaktiverad automatisk eskapning kan kedjning av filter, inklusive escape
, orsaka oväntade (men dokumenterade) resultat som följande:
{% autoescape off %}
{{ my_list|join:", "|escape }}
{% endautoescape %}
Ovanstående kod kommer att mata ut de sammanfogade elementen i my_list
utan escaping. Detta beror på att filterkedjans sekvens först kör join
på my_list
(utan att tillämpa escaping på varje element eftersom autoescape
är off
), vilket markerar resultatet som säkert. Därefter kommer detta säkra resultat att matas till escape
-filter, som inte tillämpar en andra omgång av escaping.
För att på rätt sätt undkomma varje element i en sekvens, använd filtret escapeseq
:
{% autoescape off %}
{{ my_list|escapeseq|join:", " }}
{% endautoescape %}
block
¶
Definierar ett block som kan åsidosättas av underordnade mallar. Se Mallarv för mer information.
kommentar
¶
Ignorerar allt mellan {% comment %}
och {% endcomment %}
. En valfri kommentar kan infogas i den första taggen. Detta är t.ex. användbart när du kommenterar kod för att dokumentera varför koden inaktiverades.
Exempel på användning:
<p>Rendered text with {{ pub_date|date:"c" }}</p>
{% comment "Optional note" %}
<p>Commented out text with {{ create_date|date:"c" }}</p>
{% endcomment %}
comment
-taggar kan inte nästlas.
csrf_token
¶
Den här taggen används för CSRF-skydd, enligt beskrivningen i dokumentationen för Cross Site Request Forgeries.
cykel
¶
Producerar ett av sina argument varje gång denna tagg påträffas. Det första argumentet produceras vid det första mötet, det andra argumentet vid det andra mötet och så vidare. När alla argument är uttömda går taggen tillbaka till det första argumentet och producerar det igen.
Denna tagg är särskilt användbar i en loop:
{% for o in some_list %}
<tr class="{% cycle 'row1' 'row2' %}">
...
</tr>
{% endfor %}
Den första iterationen producerar HTML som hänvisar till klass row1
, den andra till row2
, den tredje till row1
igen, och så vidare för varje iteration av loopen.
Du kan också använda variabler. Om du till exempel har två mallvariabler, rowvalue1
och rowvalue2
, kan du växla mellan deras värden så här:
{% for o in some_list %}
<tr class="{% cycle rowvalue1 rowvalue2 %}">
...
</tr>
{% endfor %}
Variabler som ingår i cykeln kommer att escapas. Du kan inaktivera automatisk escaping med :
{% for o in some_list %}
<tr class="{% autoescape off %}{% cycle rowvalue1 rowvalue2 %}{% endautoescape %}">
...
</tr>
{% endfor %}
Du kan blanda variabler och strängar:
{% for o in some_list %}
<tr class="{% cycle 'row1' rowvalue2 'row3' %}">
...
</tr>
{% endfor %}
I vissa fall kanske du vill hänvisa till det aktuella värdet i en cykel utan att gå vidare till nästa värde. För att göra detta ger du taggen {% cycle %}
ett namn med hjälp av ”as”, så här:
{% cycle 'row1' 'row2' as rowcolors %}
Från och med nu kan du infoga cykelns aktuella värde var du vill i din mall genom att referera till cykelns namn som en kontextvariabel. Om du vill flytta cykeln till nästa värde oberoende av den ursprungliga cycle
-taggen, kan du använda en annan cycle
-tagg och ange namnet på variabeln. Så, följande mall:
<tr>
<td class="{% cycle 'row1' 'row2' as rowcolors %}">...</td>
<td class="{{ rowcolors }}">...</td>
</tr>
<tr>
<td class="{% cycle rowcolors %}">...</td>
<td class="{{ rowcolors }}">...</td>
</tr>
skulle mata ut:
<tr>
<td class="row1">...</td>
<td class="row1">...</td>
</tr>
<tr>
<td class="row2">...</td>
<td class="row2">...</td>
</tr>
Du kan använda valfritt antal värden i en cycle
-tagg, åtskilda med mellanslag. Värden inom enkla citattecken ('
) eller dubbla citattecken ("
) behandlas som stränglitteraler, medan värden utan citattecken behandlas som mallvariabler.
Som standard, när du använder nyckelordet as
med cykeltaggen, kommer användningen av {% cycle %}
som initierar cykeln själv att producera det första värdet i cykeln. Detta kan vara ett problem om du vill använda värdet i en nästlad loop eller i en inkluderad mall. Om du bara vill deklarera cykeln men inte producera det första värdet kan du lägga till nyckelordet silent
som det sista nyckelordet i taggen. Till exempel:
{% for obj in some_list %}
{% cycle 'row1' 'row2' as rowcolors silent %}
<tr class="{{ rowcolors }}">{% include "subtemplate.html" %}</tr>
{% endfor %}
Detta ger en lista med <tr>
element med class
alternerande mellan row1
och row2
. Undermallen kommer att ha tillgång till rowcolors
i sitt sammanhang och värdet kommer att matcha klassen på <tr>
som omsluter den. Om nyckelordet silent
skulle utelämnas, skulle row1
och row2
skickas ut som vanlig text, utanför elementet <tr>
.
När nyckelordet silent används för en cykeldefinition, gäller tystnaden automatiskt för alla efterföljande användningar av den specifika cykeltaggen. Följande mall skulle ge ut ingenting, även om det andra anropet till {% cycle %}
inte specificerar silent
:
{% cycle 'row1' 'row2' as rowcolors silent %}
{% cycle rowcolors %}
Du kan använda resetcycle
-taggen för att få en {% cycle %}
-tagg att starta om från sitt första värde nästa gång den påträffas.
debug
¶
Skriver ut en hel del felsökningsinformation, inklusive aktuell kontext och importerade moduler. {% debug %}
skriver inte ut någonting när inställningen DEBUG
är False
.
förlänger
¶
Signalerar att denna mall utvidgar en överordnad mall.
Denna tagg kan användas på två sätt:
{% extends "base.html" %}
(med citationstecken) använder det bokstavliga värdet"base.html"
som namn på den överordnade mall som ska utökas.{% extends variable %}
använder värdet avvariable
. Om variabeln utvärderas till en sträng, kommer Django att använda den strängen som namn på den överordnade mallen. Om variabeln utvärderas till ettTemplate
-objekt, kommer Django att använda det objektet som den överordnade mallen.
Se Arv av mall för mer information.
Normalt är mallnamnet relativt till mallinläsningsprogrammets rotkatalog. Ett strängargument kan också vara en relativ sökväg som börjar med ./
eller ../
. Anta t.ex. följande katalogstruktur:
dir1/
template.html
base2.html
my/
base3.html
base1.html
I template.html
skulle följande sökvägar vara giltiga:
{% extends "./base2.html" %}
{% extends "../base1.html" %}
{% extends "./my/base3.html" %}
filter
¶
Filtrerar innehållet i blocket genom ett eller flera filter. Flera filter kan anges med pipes och filter kan ha argument, precis som i variabelsyntaxen.
Observera att blocket innehåller all text mellan taggarna filter
och endfilter
.
Exempel på användning:
{% filter force_escape|lower %}
This text will be HTML-escaped, and will appear in all lowercase.
{% endfilter %}
Observera
Filtren escape
och safe
är inte acceptabla argument. Använd istället taggen autoescape
för att hantera autoescaping för block av mallkod.
först
¶
Den första argumentvariabeln som inte är ”false” (dvs. existerar, inte är tom, inte är ett falskt booleskt värde och inte är ett numeriskt nollvärde) matas ut. Ger ingenting om alla variabler som skickas är ”false”.
Exempel på användning:
{% firstof var1 var2 var3 %}
Detta är likvärdigt med:
{% if var1 %}
{{ var1 }}
{% elif var2 %}
{{ var2 }}
{% elif var3 %}
{{ var3 }}
{% endif %}
Du kan också använda en bokstavlig sträng som ett reservvärde om alla variabler som skickas är False:
{% firstof var1 var2 var3 "fallback value" %}
Denna tagg skriver automatiskt ut variabelvärden. Du kan inaktivera auto-escaping med:
{% autoescape off %}
{% firstof var1 var2 var3 "<strong>fallback value</strong>" %}
{% endautoescape %}
Eller om bara vissa variabler ska escapas kan du använda:
{% firstof var1 var2|safe var3 "<strong>fallback value</strong>"|safe %}
Du kan använda syntaxen {% firstof var1 var2 var3 as value %}
för att lagra utdata i en variabel.
för
¶
Loopar över varje objekt i en array och gör objektet tillgängligt i en kontextvariabel. Till exempel: för att visa en lista över idrottare som finns i athlete_list
:
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
Du kan loopa över en lista i omvänd ordning genom att använda {% for obj in list reversed %}
.
Om du behöver loopa över en lista med listor kan du packa upp värdena i varje dellista till enskilda variabler. Om ditt sammanhang till exempel innehåller en lista med (x,y)-koordinater som kallas points
, kan du använda följande för att mata ut listan med punkter:
{% for x, y in points %}
There is a point at {{ x }},{{ y }}
{% endfor %}
Detta kan också vara användbart om du behöver komma åt objekten i en ordbok. Om ditt sammanhang till exempel innehåller en ordbok data
, skulle följande visa nycklarna och värdena i ordboken:
{% for key, value in data.items %}
{{ key }}: {{ value }}
{% endfor %}
Tänk på att för dot-operatorn har nyckeluppslagning i en ordbok företräde framför metoduppslagning. Om ordboken data
innehåller en nyckel med namnet 'items'
kommer därför data.items
att returnera data['items']
istället för data.items()
. Undvik att lägga till nycklar som är namngivna som dictionary-metoder om du vill använda dessa metoder i en mall (items
, values
, keys
, etc.). Läs mer om uppslagsordningen för dot-operatorn i :ref:``documentation of template variables <template-variables>`.
For-slingan ställer in ett antal variabler som är tillgängliga inom slingan:
Variabel |
Beskrivning |
---|---|
|
Den aktuella iterationen av slingan (1-indexerad) |
|
Den aktuella iterationen av loopen (0-indexerad) |
|
Antalet iterationer från slutet av slingan (1-indexerad) |
|
Antalet iterationer från slutet av slingan (0-indexerad) |
|
True om detta är första gången genom slingan |
|
True om detta är sista gången genom slingan |
|
För nästlade loopar är detta den loop som omger den aktuella loopen |
för
… tomt
¶
Taggen for
kan innehålla en valfri klausul {% empty %}
vars text visas om den angivna matrisen är tom eller inte kunde hittas:
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>Sorry, no athletes in this list.</li>
{% endfor %}
</ul>
Ovanstående är likvärdigt med - men kortare, renare och möjligen snabbare än - följande:
<ul>
{% if athlete_list %}
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
{% else %}
<li>Sorry, no athletes in this list.</li>
{% endif %}
</ul>
om
¶
Taggen {% if %}
utvärderar en variabel och om variabeln är ”sann” (dvs. existerar, inte är tom och inte är ett falskt booleskt värde) matas innehållet i blocket ut:
{% if athlete_list %}
Number of athletes: {{ athlete_list|length }}
{% elif athlete_in_locker_room_list %}
Athletes should be out of the locker room soon!
{% else %}
No athletes.
{% endif %}
Om athlete_list
inte är tom visas antalet deltagare i variabeln {{ athlete_list|length }}
i ovanstående exempel.
Som du ser kan taggen if
innehålla en eller flera klausuler av typen {% elif %}
, samt en klausul av typen {% else %}
som visas om alla tidigare villkor misslyckas. Dessa klausuler är valfria.
Booleska operatorer¶
if
-taggar kan använda och
, eller
eller inte
för att testa ett antal variabler eller för att negera en viss variabel:
{% if athlete_list and coach_list %}
Both athletes and coaches are available.
{% endif %}
{% if not athlete_list %}
There are no athletes.
{% endif %}
{% if athlete_list or coach_list %}
There are some athletes or some coaches.
{% endif %}
{% if not athlete_list or coach_list %}
There are no athletes or there are some coaches.
{% endif %}
{% if athlete_list and not coach_list %}
There are some athletes and absolutely no coaches.
{% endif %}
Användning av både och
och eller
klausuler inom samma tagg är tillåtet, där och
har högre prioritet än eller
t.ex:
{% if athlete_list and coach_list or cheerleader_list %}
kommer att tolkas som:
if (athlete_list and coach_list) or cheerleader_list:
...
Användning av faktiska parenteser i if
-taggen är ogiltig syntax. Om du behöver dem för att ange företräde, bör du använda nästlade if
-taggar.
if
-taggar kan också använda operatorerna ==
, !=
, <
, >
, <=
, >=
, in
, not in
, is
och is not
som fungerar på följande sätt:
operatör ==
¶
Jämlikhet. Ett exempel:
{% if somevar == "x" %}
This appears if variable somevar equals the string "x"
{% endif %}
operatör !=
¶
Ojämlikhet. Ett exempel:
{% if somevar != "x" %}
This appears if variable somevar does not equal the string "x",
or if somevar is not found in the context
{% endif %}
<
operatör¶
Mindre än. Ett exempel:
{% if somevar < 100 %}
This appears if variable somevar is less than 100.
{% endif %}
>
operatör¶
Större än. Exempel:
{% if somevar > 0 %}
This appears if variable somevar is greater than 0.
{% endif %}
operatorn <=
¶
Mindre än eller lika med. Exempel:
{% if somevar <= 100 %}
This appears if variable somevar is less than 100 or equal to 100.
{% endif %}
operatör >=
¶
Större än eller lika med. Exempel:
{% if somevar >= 1 %}
This appears if variable somevar is greater than 1 or equal to 1.
{% endif %}
in
operatör¶
Innehåller inom. Denna operator stöds av många Python-containrar för att testa om det givna värdet finns i containern. Följande är några exempel på hur x i y
kommer att tolkas:
{% if "bc" in "abcdef" %}
This appears since "bc" is a substring of "abcdef"
{% endif %}
{% if "hello" in greetings %}
If greetings is a list or set, one element of which is the string
"hello", this will appear.
{% endif %}
{% if user in users %}
If users is a QuerySet, this will appear if user is an
instance that belongs to the QuerySet.
{% endif %}
inte i
operatör¶
Inte innesluten i. Detta är negationen av operatorn in
.
operatör ”är¶
Objektets identitet. Testar om två värden är samma objekt. Exempel på detta:
{% if somevar is True %}
This appears if and only if somevar is True.
{% endif %}
{% if somevar is None %}
This appears if somevar is None, or if somevar is not found in the context.
{% endif %}
är inte
operatör¶
Negerad identitet för objekt. Testar om två värden inte är samma objekt. Detta är negationen av operatorn is
. Exempel på detta:
{% if somevar is not True %}
This appears if somevar is not True, or if somevar is not found in the
context.
{% endif %}
{% if somevar is not None %}
This appears if and only if somevar is not None.
{% endif %}
Filter¶
Du kan också använda filter i if
-uttrycket. Ett exempel:
{% if messages|length >= 100 %}
You have lots of messages today!
{% endif %}
Komplexa uttryck¶
Alla ovanstående kan kombineras för att bilda komplexa uttryck. För sådana uttryck kan det vara viktigt att veta hur operatorerna grupperas när uttrycket utvärderas - det vill säga prioritetsreglerna. Operatorernas rangordning, från lägsta till högsta, är följande:
eller
och
inte
in
==
,!=
,<
,>
,<=
,>=
(Detta följer Python exakt). Så, till exempel, följande komplexa if
tagg:
{% if a == b or c == d and e %}
…kommer att tolkas som:
(a == b) or ((c == d) and e)
Om du behöver olika företräde måste du använda nästlade if
-taggar. Ibland är det ändå bättre för tydlighetens skull, för dem som inte känner till företrädesreglerna.
Jämförelseoperatorerna kan inte ”kedjas” som i Python eller i matematisk notation. Till exempel:, istället för att använda:
{% if a > b > c %} (WRONG)
du bör använda:
{% if a > b and b > c %}
ifchanged
¶
Kontrollera om ett värde har ändrats sedan den senaste iterationen av en loop.
Blocktaggen {% ifchanged %}
används inom en loop. Den har två möjliga användningsområden.
Kontrollerar sitt eget återgivna innehåll mot dess tidigare tillstånd och visar bara innehållet om det har ändrats. Detta visar t.ex. en lista med dagar och visar bara månaden om den har ändrats:
<h1>Archive for {{ year }}</h1> {% for date in days %} {% ifchanged %}<h3>{{ date|date:"F" }}</h3>{% endifchanged %} <a href="{{ date|date:"M/d"|lower }}/">{{ date|date:"j" }}</a> {% endfor %}
Om du får en eller flera variabler, kontrollera om någon variabel har ändrats. I följande exempel visas till exempel datumet varje gång det ändras, medan timmen visas om antingen timmen eller datumet har ändrats:
{% for date in days %} {% ifchanged date.date %} {{ date.date }} {% endifchanged %} {% ifchanged date.hour date.date %} {{ date.hour }} {% endifchanged %} {% endfor %}
Taggen ifchanged
kan också innehålla en valfri klausul {% else %}
som visas om värdet inte har ändrats:
{% for match in matches %}
<div style="background-color:
{% ifchanged match.ballot_id %}
{% cycle "red" "blue" %}
{% else %}
gray
{% endifchanged %}
">{{ match }}</div>
{% endfor %}
inkludera
¶
Läser in en mall och renderar den i det aktuella sammanhanget. Detta är ett sätt att ”inkludera” andra mallar i en mall.
Mallnamnet kan antingen vara en variabel eller en hårdkodad (citerad) sträng, inom antingen enkla eller dubbla citattecken.
I detta exempel inkluderas innehållet i mallen "foo/bar.html"
:
{% include "foo/bar.html" %}
Normalt är mallnamnet relativt till mallinläsningsprogrammets rotkatalog. Ett strängargument kan också vara en relativ sökväg som börjar med ./
eller ../
enligt beskrivningen i taggen extends
.
I det här exemplet inkluderas innehållet i den mall vars namn finns i variabeln template_name
:
{% include template_name %}
Variabeln kan också vara vilket objekt som helst med en render()
-metod som accepterar en kontext. Detta gör att du kan referera till en kompilerad Template
i din kontext.
Dessutom kan variabeln vara en iterabel av mallnamn, i vilket fall den första som kan laddas kommer att användas, enligt select_template()
.
En inkluderad mall återges i kontexten för den mall som inkluderar den. Detta exempel ger utdata "Hello, John!"
:
Kontext: variabeln
person
är satt till"John"
och variabelngreeting
är satt till"Hello"
.Mall:
{% include "name_snippet.html" %}
Mallen
namn_snippet.html
:{{ greeting }}, {{ person|default:"friend" }}!
Du kan skicka ytterligare kontext till mallen med hjälp av nyckelordsargument:
{% include "name_snippet.html" with person="Jane" greeting="Hello" %}
Om du vill att kontexten endast ska återges med de angivna variablerna (eller inga variabler alls) använder du alternativet only
. Inga andra variabler är tillgängliga för den inkluderade mallen:
{% include "name_snippet.html" with greeting="Hi" only %}
Observera
Taggen include
bör betraktas som en implementering av ”rendera den här undermallen och inkludera HTML”, inte som ”analysera den här undermallen och inkludera dess innehåll som om den vore en del av den överordnade”. Detta innebär att det inte finns något delat tillstånd mellan inkluderade mallar - varje inkludering är en helt oberoende renderingsprocess.
Blocken utvärderas innan de inkluderas. Detta innebär att en mall som innehåller block från en annan mall kommer att innehålla block som redan har utvärderats och renderats - inte block som kan åsidosättas av t.ex. en utvidgande mall.
Ladda
¶
Läser in en uppsättning anpassade malltaggar.
Exempelvis skulle följande mall ladda alla taggar och filter som är registrerade i somelibrary
och otherlibrary
som finns i paketet package
:
{% load somelibrary package.otherlibrary %}
Du kan också selektivt ladda enskilda filter eller taggar från ett bibliotek med hjälp av argumentet from
. I det här exemplet laddas malltaggarna/-filtren med namnen foo
och bar
från somelibrary
:
{% load foo bar from somelibrary %}
Se Anpassade tagg- och filterbibliotek för mer information.
lorem
¶
Visar slumpmässig latinsk text av typen ”lorem ipsum”. Detta är användbart för att tillhandahålla exempeldata i mallar.
Användning:
{% lorem [count] [method] [random] %}
Taggen {% lorem %}
kan användas med noll, ett, två eller tre argument. Argumenten är:
Argument |
Beskrivning |
---|---|
|
Ett tal (eller en variabel) som innehåller antalet stycken eller ord som ska genereras (standard är 1). |
|
Antingen |
|
Ordet |
Exempel:
{% lorem %}
ger ett vanligt ”lorem ipsum”-stycke.{% lorem 3 p %}
ger ut det vanliga ”lorem ipsum”-stycket och två slumpmässiga stycken, vart och ett inslaget i HTML-taggen<p>
.{% lorem 2 w random %}
kommer att mata ut två slumpmässiga latinska ord.
nu
¶
Visar aktuellt datum och/eller aktuell tid i ett format som överensstämmer med den angivna strängen. En sådan sträng kan innehålla formatspecificerande tecken enligt beskrivningen i filteravsnittet date
.
Exempel:
It is {% now "jS F Y H:i" %}
Observera att du kan backslash-escape en formatsträng om du vill använda det ”råa” värdet. I det här exemplet är både ”o” och ”f” backslash-escaped, eftersom de annars är formatsträngar som visar år respektive tid:
It is the {% now "jS \o\f F" %}
Detta skulle visas som ”Det är den 4 september”.
Observera
Det format som skickas kan också vara ett av de fördefinierade DATE_FORMAT
, DATETIME_FORMAT
, SHORT_DATE_FORMAT
eller SHORT_DATETIME_FORMAT
. De fördefinierade formaten kan variera beroende på aktuell lokal och om Lokalisering av format är aktiverat, t.ex:
It is {% now "SHORT_DATETIME_FORMAT" %}
Du kan också använda syntaxen {% now "Y" as current_year %}
för att lagra utdata (som en sträng) i en variabel. Detta är användbart om du vill använda {% now %}
inuti en malltagg som till exempel blocktranslate
:
{% now "Y" as current_year %}
{% blocktranslate %}Copyright {{ current_year }}{% endblocktranslate %}
frågeställning
¶
Skickar ut en URL-kodad formaterad frågesträng baserat på de angivna parametrarna.
Denna tagg kräver en QueryDict
-instans, som som standard är request.GET
om ingen anges.
Om QueryDict
är tom och inga ytterligare parametrar har angetts, returneras en tom sträng. Annars innehåller resultatet en ledande "?"
.
Använda request.GET
som standard
För att använda request.GET
som standard QueryDict
instans, bör django.template.context_processors.request
kontextprocessorn vara aktiverad. Om den inte är aktiverad måste du antingen uttryckligen skicka request
-objektet till mallkontexten eller tillhandahålla en QueryDict
-instans till den här taggen.
Grundläggande användning¶
{% querystring %}
Skriver ut den aktuella frågesträngen ordagrant. Så om frågesträngen är ?color=green
, skulle utdata vara ?color=green
.
{% querystring size="M" %}
Skriver ut den aktuella frågesträngen med tillägg av parametern size
. I enlighet med föregående exempel skulle utdata vara ?color=green&size=M
.
Anpassad QueryDict¶
{% querystring my_query_dict %}
Du kan tillhandahålla en anpassad QueryDict
som ska användas istället för request.GET
. Så om my_query_dict
är <QueryDict: {'color': ['blue']}>
, ger detta ut ?color=blue
.
Inställning av objekt¶
{% querystring color="red" size="S" %}
Lägger till eller ändrar parametrar i frågesträngen. Varje nyckelordsargument läggs till i frågesträngen och ersätter alla befintliga värden för den nyckeln. Om den aktuella frågesträngen till exempel är ?color=green
, blir resultatet ?color=red&size=S
.
Ta bort objekt¶
{% querystring color=None %}
Om du anger None
som värde tas parametern bort från frågesträngen. Om den aktuella frågesträngen till exempel är ?color=green&size=M
, blir utdata ?size=M
.
Hantering av listor¶
{% querystring color=my_list %}
Om my_list
är ["red", "blue"]
blir utdata ?color=red&color=blue
, vilket bevarar liststrukturen i frågesträngen.
Dynamisk användning¶
Ett vanligt exempel på användning av denna tagg är att bevara den aktuella frågesträngen när en resultatsida visas, samtidigt som en länk till nästa och föregående resultatsida läggs till. Om paginatorn till exempel befinner sig på sidan 3 och den aktuella frågesträngen är ?color=blue&size=M&page=3
, skulle följande kod ge ?color=blue&size=M&page=4
:
{% querystring page=page.next_page_number %}
Du kan också lagra värdet i en variabel. Om du t.ex. behöver flera länkar till samma sida kan du definiera den som:
{% querystring page=page.next_page_number as next_page %}
omgruppering
¶
Omgrupperar en lista med likadana objekt efter ett gemensamt attribut.
Denna komplexa tagg illustreras bäst med hjälp av ett exempel: säg att cities
är en lista över städer som representeras av ordböcker som innehåller nycklarna "name"
, "population"
och "country"
:
cities = [
{"name": "Mumbai", "population": "19,000,000", "country": "India"},
{"name": "Calcutta", "population": "15,000,000", "country": "India"},
{"name": "New York", "population": "20,000,000", "country": "USA"},
{"name": "Chicago", "population": "7,000,000", "country": "USA"},
{"name": "Tokyo", "population": "33,000,000", "country": "Japan"},
]
…och du vill visa en hierarkisk lista som är sorterad efter land, så här:
Indien
Mumbai: 19.000.000
Calcutta: 15,000,000
USA
New York: 20.000.000
Chicago: 7.000.000
Japan
Tokyo: 33,000,000
Du kan använda taggen {% regroup %}
för att gruppera listan över städer efter land. Följande utdrag av mallkod skulle åstadkomma detta:
{% regroup cities by country as country_list %}
<ul>
{% for country in country_list %}
<li>{{ country.grouper }}
<ul>
{% for city in country.list %}
<li>{{ city.name }}: {{ city.population }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
Låt oss gå igenom det här exemplet. {% regroup %}
tar tre argument: listan du vill omgruppera, attributet som ska grupperas efter och namnet på den resulterande listan. Här omgrupperar vi listan cities
med attributet country
och kallar resultatet country_list
.
{% regroup %}
producerar en lista (i det här fallet country_list
) med gruppobjekt. Gruppobjekt är instanser av namedtuple()
med två fält:
grouper
– objektet som grupperades av (t.ex. strängen ”India” eller ”Japan”).list
– en lista över alla objekt i denna grupp (t.ex. en lista över alla städer med country=’India’).
Eftersom {% regroup %}
producerar namedtuple()
-objekt kan du också skriva det föregående exemplet som:
{% regroup cities by country as country_list %}
<ul>
{% for country, local_cities in country_list %}
<li>{{ country }}
<ul>
{% for city in local_cities %}
<li>{{ city.name }}: {{ city.population }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
Observera att {% regroup %}
inte ordnar sina indata! Vårt exempel bygger på det faktum att listan cities
från början var ordnad efter country
. Om listan cities
inte ordnade sina medlemmar efter country
skulle omgrupperingen naivt nog visa mer än en grupp för ett enda land. Säg till exempel att listan cities
var inställd på detta (notera att länderna inte är grupperade tillsammans):
cities = [
{"name": "Mumbai", "population": "19,000,000", "country": "India"},
{"name": "New York", "population": "20,000,000", "country": "USA"},
{"name": "Calcutta", "population": "15,000,000", "country": "India"},
{"name": "Chicago", "population": "7,000,000", "country": "USA"},
{"name": "Tokyo", "population": "33,000,000", "country": "Japan"},
]
Med denna indata för cities
skulle exemplet {% regroup %}
mallkod ovan resultera i följande utdata:
Indien
Mumbai: 19.000.000
USA
New York: 20.000.000
Indien
Calcutta: 15,000,000
USA
Chicago: 7.000.000
Japan
Tokyo: 33,000,000
Den enklaste lösningen på detta problem är att i visningskoden se till att data är ordnade enligt hur du vill visa dem.
En annan lösning är att sortera data i mallen med hjälp av filtret dictsort
, om data finns i en lista med ordböcker:
{% regroup cities|dictsort:"country" by country as country_list %}
Gruppering på andra fastigheter¶
Alla giltiga malluppslagningar är ett lagligt grupperingsattribut för regroup-taggen, inklusive metoder, attribut, ordboksnycklar och listobjekt. Om t.ex. fältet ”country” är en främmande nyckel till en klass med attributet ”description”, kan du använda:
{% regroup cities by country.description as country_list %}
Eller, om country
är ett fält med choices
, kommer det att ha en get_FOO_display()
-metod tillgänglig som ett attribut, så att du kan gruppera på visningssträngen snarare än choices
-nyckeln:
{% regroup cities by get_country_display as country_list %}
{{ country.grouper }}
kommer nu att visa värdefälten från uppsättningen choices
i stället för nycklarna.
återställ cykel
¶
Återställer en tidigare cycle så att den börjar om från sitt första objekt vid nästa möte. Utan argument kommer {% resetcycle %}
att återställa den sista {% cycle %}
som definierats i mallen.
Exempel på användning:
{% for coach in coach_list %}
<h1>{{ coach.name }}</h1>
{% for athlete in coach.athlete_set.all %}
<p class="{% cycle 'odd' 'even' %}">{{ athlete.name }}</p>
{% endfor %}
{% resetcycle %}
{% endfor %}
Detta exempel skulle returnera denna HTML:
<h1>Gareth</h1>
<p class="odd">Harry</p>
<p class="even">John</p>
<p class="odd">Nick</p>
<h1>John</h1>
<p class="odd">Andrea</p>
<p class="even">Melissa</p>
Lägg märke till hur det första blocket slutar med class="odd"
och det nya börjar med class="odd"
. Utan taggen {% resetcycle %}
skulle det andra blocket börja med class="even"
.
Du kan också återställa namngivna cykeltaggar:
{% for item in list %}
<p class="{% cycle 'odd' 'even' as stripe %} {% cycle 'major' 'minor' 'minor' 'minor' 'minor' as tick %}">
{{ item.data }}
</p>
{% ifchanged item.category %}
<h1>{{ item.category }}</h1>
{% if not forloop.first %}{% resetcycle tick %}{% endif %}
{% endifchanged %}
{% endfor %}
I det här exemplet har vi både de omväxlande udda/jämna raderna och en ”stor” rad var femte rad. Endast cykeln med fem rader återställs när en kategori ändras.
”rymdlös¶
Tar bort blanksteg mellan HTML-taggar. Detta inkluderar tabbtecken och nya linjer.
Exempel på användning:
{% spaceless %}
<p>
<a href="foo/">Foo</a>
</p>
{% endspaceless %}
Detta exempel skulle returnera denna HTML:
<p><a href="foo/">Foo</a></p>
Endast mellanrum mellan taggar tas bort - inte mellanrum mellan taggar och text. I det här exemplet kommer inte utrymmet runt Hello
att tas bort:
{% spaceless %}
<strong>
Hello
</strong>
{% endspaceless %}
templatetag
¶
Skriver ut ett av de syntaxtecken som används för att komponera malltaggar.
Mallsystemet har inget koncept för att ”undkomma” enskilda tecken. Du kan dock använda taggen {% templatetag %}
för att visa en av malltaggens teckenkombinationer.
Argumentet talar om vilken mallbit som ska matas ut:
Argument |
Utgångar |
---|---|
|
|
|
|
|
|
”Stäng variabeln |
|
|
|
”Stäng skenan |
|
|
|
”Stäng kommentaren |
|
Exempel på användning:
The {% templatetag openblock %} characters open a block.
Se även taggen verbatim
för ett annat sätt att inkludera dessa tecken.
url
¶
Returnerar en absolut sökvägsreferens (en URL utan domännamn) som matchar en given vy och valfria parametrar. Eventuella specialtecken i den resulterande sökvägen kommer att kodas med iri_to_uri()
.
Detta är ett sätt att mata ut länkar utan att bryta mot DRY-principen genom att behöva hårdkoda webbadresser i dina mallar:
{% url 'some-url-name' v1 v2 %}
Det första argumentet är en URL-mönsternamn. Det kan vara en citerad bokstav eller någon annan kontextvariabel. Ytterligare argument är valfria och bör vara mellanslagsseparerade värden som kommer att användas som argument i URL:en. Exemplet ovan visar hur man skickar positionella argument. Alternativt kan du använda nyckelordssyntax:
{% url 'some-url-name' arg1=v1 arg2=v2 %}
Blanda inte både positionell syntax och nyckelordssyntax i ett och samma anrop. Alla argument som krävs av URLconf ska finnas med.
Anta till exempel att du har en vy, app_views.client
, vars URLconf tar ett klient-ID (här är client()
en metod i vyfilen app_views.py
). URLconf-raden kan se ut så här:
path("client/<int:id>/", app_views.client, name="app-views-client")
Om den här appens URLconf inkluderas i projektets URLconf under en sökväg som denna:
path("clients/", include("project_name.app_name.urls"))
…sedan, i en mall, kan du skapa en länk till den här vyn så här:
{% url 'app-views-client' client.id %}
Malltaggen kommer att mata ut strängen /clients/client/123/
.
Observera att om URL:en som du vänder inte finns, kommer du att få ett NoReverseMatch
undantag, vilket kommer att leda till att din webbplats visar en felsida.
Om du vill hämta en URL utan att visa den kan du använda ett lite annorlunda anrop:
{% url 'some-url-name' arg arg2 as the_url %}
<a href="{{ the_url }}">I'm linking to {{ the_url }}</a>
Omfattningen av den variabel som skapas med syntaxen as var
är det {% block %}
i vilket taggen {% url %}
förekommer.
Denna syntax {% url ... as var %}
kommer inte att orsaka ett fel om vyn saknas. I praktiken kommer du att använda detta för att länka till vyer som är valfria:
{% url 'some-url-name' as the_url %}
{% if the_url %}
<a href="{{ the_url }}">Link to optional stuff</a>
{% endif %}
Om du vill hämta en URL med namnområde anger du det fullständigt kvalificerade namnet:
{% url 'myapp:view-name' %}
Detta kommer att följa den normala namespaced URL resolution strategy, inklusive att använda eventuella ledtrådar som tillhandahålls av sammanhanget om den aktuella applikationen.
Varning
Glöm inte att sätta citationstecken runt URL-mönstret name
, annars tolkas värdet som en kontextvariabel!
verbatim
¶
Stoppar mallmotorn från att rendera innehållet i denna blocktagg.
En vanlig användning är att tillåta ett JavaScript-mallskikt som kolliderar med Djangos syntax. Ett exempel:
{% verbatim %}
{{if dying}}Still alive.{{/if}}
{% endverbatim %}
Du kan också ange en specifik avslutande tagg, vilket gör det möjligt att använda {% endverbatim %}
som en del av det orenderade innehållet:
{% verbatim myblock %}
Avoid template rendering via the {% verbatim %}{% endverbatim %} block.
{% endverbatim myblock %}
breddförhållande
¶
För att skapa stapeldiagram och liknande beräknar den här taggen förhållandet mellan ett givet värde och ett maxvärde och tillämpar sedan förhållandet på en konstant.
Till exempel:
<img src="bar.png" alt="Bar"
height="10" width="{% widthratio this_value max_value max_width %}">
Om this_value
är 175, max_value
är 200 och max_width
är 100 kommer bilden i exemplet ovan att vara 88 pixlar bred (eftersom 175/200 = 0,875; 0,875 * 100 = 87,5 som avrundas uppåt till 88).
I vissa fall kanske du vill fånga resultatet av widthratio
i en variabel. Det kan till exempel vara användbart i en blocktranslate
som denna:
{% widthratio this_value max_value max_width as width %}
{% blocktranslate %}The width is: {{ width }}{% endblocktranslate %}
”med¶
Cachelagrar en komplex variabel under ett enklare namn. Detta är användbart när man använder en ”dyr” metod (t.ex. en metod som slår i databasen) flera gånger.
Till exempel:
{% with total=business.employees.count %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
Den ifyllda variabeln (i exemplet ovan total
) är endast tillgänglig mellan taggarna {% with %}
och {% endwith %}
.
Du kan tilldela mer än en kontextvariabel:
{% with alpha=1 beta=2 %}
...
{% endwith %}
Observera
Det tidigare mer utförliga formatet stöds fortfarande: {% with business.employees.count as total %}`
Inbyggd filterreferens¶
add
¶
Lägger till argumentet till värdet.
Till exempel:
{{ value|add:"2" }}
Om värde
är 4
, blir utdata 6
.
Detta filter kommer först att försöka tvinga båda värdena till heltal. Om detta misslyckas försöker det ändå lägga ihop värdena. Detta kommer att fungera på vissa datatyper (strängar, listor etc.) och misslyckas på andra. Om det misslyckas blir resultatet en tom sträng.
Till exempel:, om vi har:
{{ first|add:second }}
och först
är [1, 2, 3]
och andra
är [4, 5, 6]
, så blir utdata [1, 2, 3, 4, 5, 6]
.
Varning
Strängar som kan omvandlas till heltal kommer att summeras, inte konkateneras, som i det första exemplet ovan.
addslashes
¶
Lägger till snedstreck före citattecken. Användbart för att undkomma strängar i CSV, till exempel.
Till exempel:
{{ value|addslashes }}
Om värde
är "Jag använder Django"
, kommer utdata att vara "Jag använder Django"
.
capfirst
¶
Gör det första tecknet i värdet till en stor bokstav. Om det första tecknet inte är en bokstav har detta filter ingen effekt.
Till exempel:
{{ value|capfirst }}
Om värde
är "django"
, kommer utdata att vara "Django"
.
center
¶
Centrerar värdet i ett fält med en given bredd.
Till exempel:
"{{ value|center:"15" }}"
Om värde
är "Django"
, kommer utdata att vara " Django"
.
klipp
¶
Tar bort alla värden av arg från den angivna strängen.
Till exempel:
{{ value|cut:" " }}
Om värde
är "Sträng med mellanslag"
, kommer utdata att vara "Strängmed mellanslag"
.
datum
¶
Formaterar ett datum enligt det angivna formatet.
Använder ett liknande format som PHP:s date()-funktion med några skillnader.
Observera
Dessa formattecken används inte i Django utanför mallar. De utformades för att vara kompatibla med PHP för att underlätta övergången för designers.
Tillgängliga formatsträngar:
Format tecken |
Beskrivning |
Exempel utdata |
---|---|---|
Dag |
||
|
Månadsdag, 2 siffror med inledande nollor. |
|
|
Dag i månaden utan inledande nollor. |
1 januari till 31 december |
|
Veckodag, textuell, 3 bokstäver. |
|
|
Veckodag, textuell, lång. |
”Fredag |
|
Engelskt ordinalsuffix för dag i månaden, 2 tecken. |
|
|
Veckodag, siffror utan inledande nollor. |
|
|
Dag på året. |
|
Vecka |
||
|
ISO-8601 veckonummer för året, med veckor som börjar på måndag. |
|
Månad |
||
|
Månad, 2 siffror med inledande nollor. |
|
|
Månad utan inledande nollor. |
”1” till ”12 |
|
Månad, textuell, 3 bokstäver. |
”Jan |
|
Månad, text, 3 bokstäver, gemener. |
|
|
Månad, lokalspecifik alternativ representation som vanligtvis används för lång datumrepresentation. |
|
|
Månad, textuell, lång. |
|
|
Månadsförkortning i Associated Press-stil. Proprietär förlängning. |
”januari”, ”februari”, ”mars”, ”maj |
|
Antal dagar i den angivna månaden. |
|
År |
||
|
År, 2 siffror med inledande nollor. |
|
|
År, 4 siffror med inledande nollor. |
|
|
Boolean för om det är ett skottår. |
|
|
ISO-8601 veckonumrerat år, motsvarande ISO-8601 veckonummer (W) som använder skottveckor. Se Y för det mer vanliga årsformatet. |
|
Tid |
||
|
Timme, 12-timmarsformat utan inledande nollor. |
”1” till ”12 |
|
Timme, 24-timmarsformat utan inledande nollor. |
”0” till ”23 |
|
Timme, 12-timmarsformat. |
|
|
Timme, 24 timmars format. |
|
|
Protokoll. |
|
|
Sekunder, 2 siffror med inledande nollor. |
|
|
Mikrosekunder. |
|
|
|
|
|
|
|
|
Tid, i 12-timmars timmar och minuter, med minuter utelämnade om de är noll. Proprietär förlängning. |
|
|
Tid, i 12-timmarstimmar, minuter och ”a.m.”/”p.m.”, med minuter utelämnade om de är noll och specialfallsträngarna ”midnight” och ”noon” i förekommande fall. Proprietär förlängning. |
|
Timezon |
||
|
Namn på tidszon. Kan vara i vilket format som helst eller returnera en tom sträng, beroende på datatiden. |
|
|
Sommartid, oavsett om den är i kraft eller inte. |
|
|
Skillnad mot Greenwich-tid i timmar. |
|
|
Tidszon för denna maskin. |
|
|
Tidszonsförskjutning i sekunder. Förskjutningen för tidszoner väster om UTC är alltid negativ och för tidszoner öster om UTC är den alltid positiv. |
|
Datum/Tid |
||
|
ISO 8601-format. (Obs: till skillnad från andra formaterare, t.ex. ”Z”, ”O” eller ”r”, kommer formateraren ”c” inte att lägga till tidszonsförskjutning om värdet är en naiv datetime (se |
|
|
RFC 5322 formatted date. |
|
|
Sekunder sedan Unix-epoken (1 januari 1970 00:00:00 UTC). |
Till exempel:
{{ value|date:"D d M Y" }}
Om value
är ett datetime
-objekt (t.ex. resultatet av datetime.datetime.now()
), kommer utdata att vara strängen 'Wed 09 Jan 2008'
.
Det format som skickas kan vara ett av de fördefinierade DATE_FORMAT
, DATETIME_FORMAT
, SHORT_DATE_FORMAT
eller SHORT_DATETIME_FORMAT
, eller ett eget format som använder formatspecifikationerna i tabellen ovan. Observera att fördefinierade format kan variera beroende på aktuell lokal.
Om man antar att LANGUAGE_CODE
till exempel är "es"
, då för:
{{ value|date:"SHORT_DATE_FORMAT" }}
skulle utdata vara strängen "09/01/2008"
(formatspecifikationen "SHORT_DATE_FORMAT"
för es
locale som levereras med Django är "d/m/Y"
).
När den används utan en formatsträng används formatspecifikationen DATE_FORMAT
. Med samma inställningar som i föregående exempel:
{{ value|date }}
ger ut 9 de Enero de 2008
(formatspecifikationen DATE_FORMAT
för es
-land är r'j \d\e F \d\e Y'
). Både ”d” och ”e” är förslutna med backslash, eftersom de annars är formatsträngar som visar dagen respektive tidszonens namn.
Du kan kombinera date
med filtret time
för att återge en fullständig representation av ett datetime
-värde. T.ex:
{{ value|date:"D d M Y" }} {{ value|time:"H:i" }}
standard
¶
Om värdet utvärderas till False
används det angivna standardvärdet. I annat fall används värdet.
Till exempel:
{{ value|default:"nothing" }}
Om value
är ""
(den tomma strängen) blir utdata nothing
.
standard_if_none
¶
Om (och endast om) värdet är None
, används det angivna standardvärdet. I annat fall används värdet.
Observera att om en tom sträng anges kommer standardvärdet inte att användas. Använd filtret default
om du vill använda en reservfunktion för tomma strängar.
Till exempel:
{{ value|default_if_none:"nothing" }}
Om värde
är None
blir utdata ingenting
.
Dikteringsort
¶
Tar en lista med lexikon och returnerar listan sorterad efter den nyckel som anges i argumentet.
Till exempel:
{{ value|dictsort:"name" }}
Om värde
är:
[
{"name": "zed", "age": 19},
{"name": "amy", "age": 22},
{"name": "joe", "age": 31},
]
så skulle utmatningen vara:
[
{"name": "amy", "age": 22},
{"name": "joe", "age": 31},
{"name": "zed", "age": 19},
]
Du kan också göra mer komplicerade saker som:
{% for book in books|dictsort:"author.age" %}
* {{ book.title }} ({{ book.author.name }})
{% endfor %}
Om böcker
är:
[
{"title": "1984", "author": {"name": "George", "age": 45}},
{"title": "Timequake", "author": {"name": "Kurt", "age": 75}},
{"title": "Alice", "author": {"name": "Lewis", "age": 33}},
]
så skulle utmatningen vara:
* Alice (Lewis)
* 1984 (George)
* Timequake (Kurt)
dictsort
kan också ordna en lista med listor (eller något annat objekt som implementerar __getitem__()
)) efter element vid angivet index. Till exempel:
{{ value|dictsort:0 }}
Om värde
är:
[
("a", "42"),
("c", "string"),
("b", "foo"),
]
så skulle utmatningen vara:
[
("a", "42"),
("b", "foo"),
("c", "string"),
]
Du måste skicka indexet som ett heltal i stället för en sträng. Följande ger tom utdata:
{{ values|dictsort:"0" }}
Ordning efter element vid angivet index stöds inte för lexikon.
Domslut omvända
¶
Tar en lista med lexikon och returnerar listan sorterad i omvänd ordning efter den nyckel som anges i argumentet. Detta fungerar på exakt samma sätt som ovanstående filter, men det returnerade värdet kommer att vara i omvänd ordning.
delbar genom
¶
Returnerar True
om värdet är delbart med argumentet.
Till exempel:
{{ value|divisibleby:"3" }}
Om värde
är 21
blir utdata True
.
flykt
¶
Escapar en strängs HTML. Specifikt gör den dessa utbyten:
<
konverteras till<`
>
konverteras till>
'
(enkelt citattecken) konverteras till'
"
(dubbelcitat) konverteras till"
&
konverteras till&
Om du använder escape
på en variabel som normalt skulle ha automatisk escaping på resultatet kommer det bara att resultera i en omgång av escaping. Så det är säkert att använda den här funktionen även i miljöer med automatisk escaping. Om du vill att flera escapingpass ska tillämpas, använd filtret force_escape
.
Du kan t.ex. använda escape
på fält när autoescape`
är avstängt:
{% autoescape off %}
{{ title|escape }}
{% endautoescape %}
Kedja escape
med andra filter
Som nämnts i avsnittet autoescape
, när filter som innehåller escape
kedjas ihop, kan det resultera i oväntade resultat om föregående filter markerar en potentiellt osäker sträng som säker på grund av avsaknaden av escaping orsakad av att autoescape
är off
.
I sådana fall skulle en kedja av escape
inte återskapa strängar som redan har markerats som säkra.
Detta är särskilt viktigt när du använder filter som arbetar med sekvenser, t.ex. join
. Om du behöver escape varje element i en sekvens, använd det dedikerade filtret escapeseq
.
escapejs
¶
Escapar tecken för användning som en hel JavaScript-sträng, inom enkla eller dubbla citattecken, enligt nedan. Detta filter gör inte strängen säker för användning i ”JavaScript template literals” (JavaScript backtick syntax). Alla andra användningsområden som inte anges ovan stöds inte. Det rekommenderas generellt att data skickas med hjälp av HTML-attributen data-
eller filtret json_script
, snarare än i inbäddad JavaScript.
Till exempel:
<script>
let myValue = '{{ value|escapejs }}'
escapeseq
¶
Tillämpar filtret escape
på varje element i en sekvens. Används tillsammans med andra filter som arbetar med sekvenser, t.ex. join
. Till exempel:
{% autoescape off %}
{{ my_list|escapeseq|join:", " }}
{% endautoescape %}
filstorleksformat
¶
Formaterar värdet som en ”mänskligt läsbar” filstorlek (t.ex. '13 KB'
, '4,1 MB'
, '102 bytes'
, etc.).
Till exempel:
{{ value|filesizeformat }}
Om värde
är 123456789, skulle utdata vara 117.7 MB
.
Filstorlekar och SI-enheter
Strängt taget överensstämmer inte filesizeformat
med International System of Units som rekommenderar att man använder KiB, MiB, GiB, etc. när bytestorlekar beräknas i 1024 potenser (vilket är fallet här). Istället använder Django traditionella enhetsnamn (KB, MB, GB, etc.) som motsvarar namn som används mer allmänt.
först
¶
Returnerar det första objektet i en lista.
Till exempel:
{{ value|first }}
Om värde
är listan ['a', 'b', 'c']
, blir utdata 'a'
.
flatformat
¶
När det används utan argument avrundas ett flyttal till en decimal - men bara om det finns en decimaldel som ska visas. Till exempel:
|
Mall |
Utmatning |
---|---|---|
|
|
|
|
|
|
|
|
|
Om floatformat
används med ett numeriskt heltalsargument avrundas ett tal till så många decimaler. Till exempel:
|
Mall |
Utmatning |
---|---|---|
|
|
|
|
|
|
|
|
|
Särskilt användbart är att ange 0 (noll) som argument, vilket gör att floaten avrundas till närmaste heltal.
|
Mall |
Utmatning |
---|---|---|
|
|
|
|
|
|
|
|
|
Om argumentet som skickas till floatformat
är negativt, kommer det att avrunda ett tal till så många decimaler - men bara om det finns en decimaldel som ska visas. Till exempel:
|
Mall |
Utmatning |
---|---|---|
|
|
|
|
|
|
|
|
|
Om argumentet som skickas till floatformat
har suffixet g
, kommer det att tvinga fram gruppering med :inställningen:`THOUSAND_SEPARATOR` för den aktiva locale. Till exempel:, när den aktiva locale är en
(engelska):
|
Mall |
Utmatning |
---|---|---|
|
|
|
|
|
|
|
|
|
Utdata lokaliseras alltid (oberoende av taggen {% localize off %}
) såvida inte argumentet som skickas till floatformat
har suffixet u
, vilket tvingar fram en inaktivering av lokaliseringen. Till exempel: när det aktiva språket är pl
(polska):
|
Mall |
Utmatning |
---|---|---|
|
|
|
|
|
|
Att använda floatformat
utan argument är likvärdigt med att använda floatformat
med argumentet -1
.
forcera_utgång
¶
Tillämpar HTML-escape på en sträng (se filtret escape
för mer information). Det här filtret tillämpas omedelbart och returnerar en ny, escapad sträng. Detta är användbart i de sällsynta fall där du behöver flera eskapader eller vill tillämpa andra filter på de eskapade resultaten. Normalt sett bör du använda filtret escape
.
Om du t.ex. vill fånga upp HTML-elementen <p>
som skapats av filtret linebreaks
:
{% autoescape off %}
{{ body|linebreaks|force_escape }}
{% endautoescape %}
get_digit
¶
Med ett heltal returneras den begärda siffran, där 1 är siffran längst till höger, 2 är den näst längst till höger osv. Returnerar det ursprungliga värdet för ogiltig indata (om indata eller argument inte är ett heltal, eller om argumentet är mindre än 1). I annat fall är utdata alltid ett heltal.
Till exempel:
{{ value|get_digit:"2" }}
Om värde
är 123456789
, kommer utdata att vara 8
.
irienkod
¶
Konverterar en IRI (Internationalized Resource Identifier) till en sträng som är lämplig att inkludera i en URL. Detta är nödvändigt om du försöker använda strängar som innehåller icke-ASCII-tecken i en URL.
Det är säkert att använda detta filter på en sträng som redan har gått igenom filtret urlencode
.
Till exempel:
{{ value|iriencode }}
Om värde
är "?test=I ♥ Django"
, kommer utdata att vara "?test=I%20%E2%99%A5%20Django"
.
”Ansluta¶
Sammanfogar en lista med en sträng, som Pythons str.join(list)
Till exempel:
{{ value|join:" // " }}
Om value
är listan ['a', 'b', 'c']
, blir utdata strängen "a // b // c"
.
json_script
¶
Skickar ut ett Python-objekt på ett säkert sätt som JSON, inslaget i en tagg <script>
, redo att användas med JavaScript.
Argument: Det valfria HTML-”id” för taggen <script>
.
Till exempel:
{{ value|json_script:"hello-data" }}
Om värde
är ordlistan {'hello': 'world'}
, blir utdata följande:
<script id="hello-data" type="application/json">{"hello": "world"}</script>
Den resulterande datan kan nås i JavaScript på följande sätt:
const value = JSON.parse(document.getElementById('hello-data').textContent);
XSS-attacker motverkas genom att tecknen ”<”, ”>” och ”&” escapas. Till exempel: om värde
är {'hello': 'world</script>&'}
, är utdata:
<script id="hello-data" type="application/json">{"hello": "world\\u003C/script\\u003E\\u0026amp;"}</script>
Detta är förenligt med en strikt policy för innehållssäkerhet som förbjuder exekvering av skript på sidan. Det upprätthåller också en ren separation mellan passiva data och körbar kod.
Sista
¶
Returnerar det sista objektet i en lista.
Till exempel:
{{ value|last }}
Om värde
är listan ['a', 'b', 'c', 'd']
, blir utdata strängen "d"
.
längd
¶
Returnerar längden på värdet. Detta fungerar för både strängar och listor.
Till exempel:
{{ value|length }}
Om värde
är ['a', 'b', 'c', 'd']
eller "abcd"
, blir utdata 4
.
Filtret returnerar 0
för en odefinierad variabel.
linebreaks
¶
Ersätter radbrytningar i vanlig text med lämplig HTML; en enda ny rad blir en HTML-radbrytning (<br>
) och en ny rad följd av en blankrad blir en styckebrytning (</p>
).
Till exempel:
{{ value|linebreaks }}
Om värde
är Joel\nis en snigel
, kommer utdata att vara ``Joel<p><br>är en snigel``</p>.
linebreaksbr
¶
Konverterar alla nya linjer i ett stycke vanlig text till HTML-radbrytningar (<br>
).
Till exempel:
{{ value|linebreaksbr }}
Om värde
är Joel\nis en snigel
, kommer utdata att vara Joel<br>är en snigel
.
linenummer
¶
Visar text med radnummer.
Till exempel:
{{ value|linenumbers }}
Om värde
är:
one
two
three
utmatningen kommer att vara:
1. one
2. two
3. three
”rättvist¶
Vänsterjusterar värdet i ett fält med en given bredd.
Argument: fältstorlek
Till exempel:
"{{ value|ljust:"10" }}"
Om värde
är Django
, kommer utdata att vara "Django"
.
lägre
¶
Konverterar en sträng till gemener.
Till exempel:
{{ value|lower }}
Om value
är Totally LOVING this Album!
, kommer utdata att vara totally loving this album!
.
make_list
¶
Returnerar värdet omvandlat till en lista. För en sträng är det en lista med tecken. För ett heltal omvandlas argumentet till en sträng innan en lista skapas.
Till exempel:
{{ value|make_list }}
Om värde
är strängen "Joel"
, kommer utdata att vara listan ['J', 'o', 'e', 'l']
. Om värde
är 123
, kommer utdata att vara listan ['1', '2', '3']
.
telefon2numerisk
¶
Konverterar ett telefonnummer (som kan innehålla bokstäver) till dess numeriska motsvarighet.
Inmatningen behöver inte vara ett giltigt telefonnummer. Detta konverterar glatt vilken sträng som helst.
Till exempel:
{{ value|phone2numeric }}
Om värde
är 800-COLLECT
kommer utdata att vara 800-2655328
.
pluralize
¶
Returnerar ett pluralsuffix om värdet inte är 1
, '1'
eller ett objekt med längd 1. Som standard är detta suffix 's'
.
Exempel:
You have {{ num_messages }} message{{ num_messages|pluralize }}.
Om num_messages
är 1
, kommer utdata att vara Du har 1 meddelande.
Om num_messages
är 2
kommer utdata att vara Du har 2 meddelanden.
För ord som kräver ett annat suffix än 's'
kan du ange ett alternativt suffix som en parameter till filtret.
Exempel:
You have {{ num_walruses }} walrus{{ num_walruses|pluralize:"es" }}.
För ord som inte pluraliseras med ett enkelt suffix kan du ange både ett singular- och ett pluralsuffix, åtskilda med ett kommatecken.
Exempel:
You have {{ num_cherries }} cherr{{ num_cherries|pluralize:"y,ies" }}.
Observera
Använd blocktranslate
för att sätta översatta strängar i plural.
avtryck
¶
Ett omslag runt pprint.pprint()
– för felsökning, egentligen.
slumpmässig
¶
Returnerar ett slumpmässigt objekt från den angivna listan.
Till exempel:
{{ value|random }}
Om värde
är listan ['a', 'b', 'c', 'd']
, kan utdata vara "b"
.
”Rättvisa¶
Högerjusterar värdet i ett fält med en given bredd.
Argument: fältstorlek
Till exempel:
"{{ value|rjust:"10" }}"
Om värde
är Django
, kommer utdata att vara " Django"
.
säker
¶
Markerar en sträng som inte kräver ytterligare HTML-escaping före utmatning. När autoescaping är avstängd har detta filter ingen effekt.
Observera
Om du kedjar filter kan ett filter som tillämpas efter safe
göra innehållet osäkert igen. I följande kod skrivs till exempel variabeln ut som den är, utan avkodning:
{{ var|safe|escape }}
safeseq
¶
Tillämpar filtret safe
på varje element i en sekvens. Används tillsammans med andra filter som arbetar med sekvenser, t.ex. join
. Till exempel:
{{ some_list|safeseq|join:", " }}
Du kan inte använda filtret safe
direkt i det här fallet, eftersom det först skulle konvertera variabeln till en sträng i stället för att arbeta med de enskilda elementen i sekvensen.
skiva
¶
Returnerar en del av listan.
Använder samma syntax som Pythons list slicing. Se Python-dokumentationen för en introduktion.
Exempel:
{{ some_list|slice:":2" }}
Om some_list
är ['a', 'b', 'c']
, blir utdata ['a', 'b']
.
slugify
¶
Konverterar till ASCII. Omvandlar mellanslag till bindestreck. Tar bort tecken som inte är alfanumeriska, understrykningstecken eller bindestreck. Konverterar till gemener. Tar även bort inledande och avslutande blanksteg.
Till exempel:
{{ value|slugify }}
Om värde
är "Joel är en slug"
, kommer utdata att vara "joel-is-a-slug"
.
strängformat
¶
Formaterar variabeln enligt argumentet, en specifikator för strängformatering. Denna specifikator använder printf-style String Formatting-syntaxen, med undantaget att det inledande ”%” utelämnas.
Till exempel:
{{ value|stringformat:"E" }}
Om värde
är 10
, blir utmatningen 1.000000E+01
.
striptags
¶
Gör allt som står i din makt för att ta bort alla [X]HTML-taggar.
Till exempel:
{{ value|striptags }}
Om värde
är <b>"Joel</b> <button>är</button> en <span>slug</span>"
, kommer utdata att vara "Joel är en slug"
.
Ingen säkerhetsgaranti
Observera att striptags
inte ger någon garanti för att dess utdata är HTML-säker, särskilt med icke-giltig HTML-inmatning. Så ANVÄND ALDRIG filtret safe
på utdata från striptags
. Om du letar efter något mer robust kan du överväga att använda ett HTML-saneringsverktyg från tredje part.
tid
¶
Formaterar en tid enligt det angivna formatet.
Det angivna formatet kan vara det fördefinierade TIME_FORMAT
, eller ett eget format, samma som för filtret date
. Observera att det fördefinierade formatet är lokalberoende.
Till exempel:
{{ value|time:"H:i" }}
Om value
är likvärdigt med datetime.datetime.now()
, kommer utdata att vara strängen "01:23"
.
Observera att du kan använda backslash-escape för en formatsträng om du vill använda det ”råa” värdet. I det här exemplet är både ”h” och ”m” backslash-escaped, eftersom de annars är formatsträngar som visar timmen respektive månaden:
{{ value|time:"H\h i\m" }}
Detta skulle visas som ”01h 23m”.
Ett annat exempel:
Om man antar att LANGUAGE_CODE
till exempel är "de"
, så för:
{{ value|time:"TIME_FORMAT" }}
kommer utdata att vara strängen "01:23"
(Formatspecifikationen "TIME_FORMAT"
för de
locale som levereras med Django är "H:i"
).
Filtret time
accepterar endast parametrar i formatsträngen som relaterar till tiden på dagen, inte datumet. Om du behöver formatera ett date
-värde använder du istället filtret date
(eller tillsammans med time
om du behöver rendera ett fullständigt datetime
-värde).
Det finns ett undantag från ovanstående regel: När ett datetime
-värde med tillhörande tidszonsinformation skickas (en :ref:time-zone-aware <naive_vs_aware_datetimes>` ``datetime
-instans) kommer time
-filtret att acceptera de tidszonsrelaterade :ref:formatspecifikationerna <date-and-time-formatting-specifiers>` ``'e'
, 'O'
, 'T'
och 'Z'
.
När den används utan en formatsträng används formatspecifikationen TIME_FORMAT
:
{{ value|time }}
är samma sak som:
{{ value|time:"TIME_FORMAT" }}
tid sedan
¶
Formaterar ett datum som tiden sedan det datumet (t.ex. ”4 dagar, 6 timmar”).
Tar emot ett valfritt argument som är en variabel som innehåller det datum som ska användas som jämförelsepunkt (utan argumentet är jämförelsepunkten nu). Om till exempel blog_date
är en datuminstans som representerar midnatt den 1 juni 2006 och comment_date
är en datuminstans för 08:00 den 1 juni 2006, så skulle följande returnera ”8 timmar”:
{{ blog_date|timesince:comment_date }}
Jämförelse av offset-naiva och offset-medvetna datatider kommer att ge en tom sträng.
Minuter är den minsta enhet som används, och ”0 minuter” kommer att returneras för alla datum som ligger i framtiden i förhållande till jämförelsepunkten.
tidtill
¶
Liknar timesince
, förutom att det mäter tiden från nu till det angivna datumet eller datatiden. Om det till exempel är den 1 juni 2006 idag och conference_date
är en datuminstans som innehåller den 29 juni 2006, kommer {{ conference_date|timeuntil }}
att returnera ”4 veckor”.
Tar ett valfritt argument som är en variabel som innehåller det datum som ska användas som jämförelsepunkt (i stället för now). Om from_date
innehåller 22 juni 2006, kommer följande att returnera ”1 vecka”:
{{ conference_date|timeuntil:from_date }}
Jämförelse av offset-naiva och offset-medvetna datatider kommer att ge en tom sträng.
Minuter är den minsta enhet som används och ”0 minuter” kommer att returneras för varje datum som ligger i det förflutna i förhållande till jämförelsepunkten.
title
¶
Konverterar en sträng till titlecase genom att låta orden börja med en versal och de återstående tecknen bli gemener. Denna tagg gör inga ansträngningar för att hålla ”triviala ord” i gemener.
Till exempel:
{{ value|title }}
Om värde
är "mitt FÖRSTA inlägg"
, blir utdata "mitt första inlägg"
.
avkorta tecken
¶
Trunkerar en sträng om den är längre än det angivna antalet tecken. Trunkerade strängar avslutas med ett översättningsbart ellips-tecken (”…”).
Argument: Antal tecken att trunkera till
Till exempel:
{{ value|truncatechars:7 }}
Om värde
är "Joel är en slug"
, kommer utdata att vara "Joel i..."
.
trunkatechars_html
¶
Liknar truncatechars
, förutom att den är medveten om HTML-taggar. Alla taggar som öppnas i strängen och inte stängs före avkortningspunkten stängs omedelbart efter avkortningen.
Till exempel:
{{ value|truncatechars_html:7 }}
Om värde
är <p>"Joel är en slug</p>"
, kommer utdata att vara "<p>Joel i..."</p>
.
Nya streck i HTML-innehållet kommer att bevaras.
Storlek på inmatad sträng
Bearbetning av stora, potentiellt missbildade HTML-strängar kan vara resurskrävande och påverka tjänstens prestanda. truncatechars_html
begränsar indata till de första fem miljoner tecknen.
truncatewords
¶
Avkortar en sträng efter ett visst antal ord.
Argument: Antal ord att avkorta efter
Till exempel:
{{ value|truncatewords:2 }}
Om värde
är "Joel är en slug"
, kommer utdata att vara "Joel är ..."
.
Nya streck i strängen tas bort.
truncatewords_html
¶
Liknar truncatewords
, förutom att den är medveten om HTML-taggar. Alla taggar som öppnas i strängen och inte stängs före avkortningspunkten stängs omedelbart efter avkortningen.
Detta är mindre effektivt än truncatewords
, så det bör endast användas när det får HTML-text.
Till exempel:
{{ value|truncatewords_html:2 }}
Om värde
är <p>"Joel är en slug</p>"
, kommer utdata att vara "<p>Joel är ..."</p>
.
Nya streck i HTML-innehållet kommer att bevaras.
Storlek på inmatad sträng
Bearbetning av stora, potentiellt missbildade HTML-strängar kan vara resurskrävande och påverka tjänstens prestanda. truncatewords_html
begränsar indata till de första fem miljoner tecknen.
”oordnad lista¶
Tar rekursivt en självbäddad lista och returnerar en oordnad HTML-lista – UTAN att öppna och stänga <ul>
taggar.
Listan förutsätts vara i rätt format. Om till exempel var
innehåller ['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']]
, så kommer {{ var|unordered_list }}
att returneras:
<li>States
<ul>
<li>Kansas
<ul>
<li>Lawrence</li>
<li>Topeka</li>
</ul>
</li>
<li>Illinois</li>
</ul>
</li>
övre
¶
Konverterar en sträng till versaler.
Till exempel:
{{ value|upper }}
Om värde
är "Joel är en slug"
, kommer utdata att vara "JOEL ÄR EN SLUG"
.
urlencode
¶
Escapar ett värde för användning i en URL.
Till exempel:
{{ value|urlencode }}
Om värde
är "https://www.example.org/foo?a=b&c=d"
blir utdata "https%3A//www.example.org/foo%3Fa%3Db%26c%3Dd"
.
Ett valfritt argument som innehåller de tecken som inte ska escapas kan anges.
Om inget anges antas tecknet ”/” vara säkert. En tom sträng kan anges om alla tecken ska escapas. Till exempel:
{{ value|urlencode:"" }}
Om värde
är "https://www.example.org/"
, kommer utdata att vara "https%3A%2F%2Fwww.example.org%2F"
.
urlize
¶
Omvandlar webbadresser och e-postadresser i text till klickbara länkar.
Denna malltagg fungerar på länkar med prefixet http://
, https://
eller www.
. Till exempel: kommer https://djangocon.eu
att konverteras men djangocon.eu
kommer inte att göra det.
Den stöder också länkar som endast innehåller domäner och som slutar på en av de ursprungliga toppdomänerna (.com
, .edu
, .gov
, .int
, .mil
, .net
och .org
). Till exempel: konverteras djangoproject.com
.
Länkar kan ha efterföljande skiljetecken (punkter, kommatecken, slutparenteser) och inledande skiljetecken (öppningsparenteser), och urlize
kommer fortfarande att göra det rätta.
Länkar som genereras av urlize
har ett rel="nofollow"
-attribut tillagt till sig.
Till exempel:
{{ value|urlize }}
Om värde
är "Kolla in www.djangoproject.com"
, kommer utdata att vara "Kolla in <a href="http://www.djangoproject.com" rel="nofollow">www.djangoproject.com"</a>
.
Förutom webblänkar omvandlar urlize
även e-postadresser till mailto:
-länkar. Om värde
är "Skicka frågor till foo@example.com"
, kommer utdata att vara "Skicka frågor till <a href="mailto:foo@example.com">foo@example.com"</a>
.
Filtret urlize
tar också en valfri parameter autoescape
. Om autoescape
är True
, kommer länktexten och webbadresserna att escapas med Djangos inbyggda escape
-filter. Standardvärdet för autoescape
är True
.
Observera
Om urlize
används på text som redan innehåller HTML-markering eller på e-postadresser som innehåller enkla citattecken ('
) fungerar det inte som förväntat. Använd detta filter endast på vanlig text.
urlizetrunc
¶
Omvandlar webbadresser och e-postadresser till klickbara länkar precis som urlize, men trunkerar webbadresser som är längre än den angivna teckengränsen.
Argument: Antal tecken som länktexten ska trunkeras till, inklusive den ellips som läggs till om trunkering är nödvändig.
Till exempel:
{{ value|urlizetrunc:15 }}
Om värde
är "Kolla in www.djangoproject.com"
, skulle utdata vara "Kolla in <a href="http://www.djangoproject.com" rel="nofollow">www.djangoproj</a>..."
.
Precis som med urlize bör detta filter endast användas på vanlig text.
ordantal
¶
Returnerar antalet ord.
Till exempel:
{{ value|wordcount }}
Om värde
är "Joel är en slug"
, blir utdata 4
.
wordwrap
¶
Ombryter ord med angiven radlängd.
Argument: antal tecken vid vilka texten ska brytas
Till exempel:
{{ value|wordwrap:5 }}
Om värde
är Joel är en slug
, skulle utdata vara:
Joel
is a
slug
”Ja, nej¶
Mappar värden för True
, False
och (valfritt) None
till strängarna ”yes”, ”no”, ”maybe” eller en anpassad mappning som skickas som en kommaseparerad lista och returnerar en av dessa strängar i enlighet med värdet:
Till exempel:
{{ value|yesno:"yeah,no,maybe" }}
Värde |
Argument |
Utgångar |
---|---|---|
|
|
|
|
”Ja, nej, kanske.” |
|
|
”Ja, nej, kanske.” |
|
|
”Ja, nej, kanske.” |
|
|
”Ja, nej.” |
|
Taggar och filter för internationalisering¶
Django tillhandahåller malltaggar och filter för att styra varje aspekt av internationalisering i mallar. De möjliggör detaljerad kontroll av översättningar, formatering och konvertering av tidszoner.
i18n
¶
Detta bibliotek gör det möjligt att ange översättningsbar text i mallar. För att aktivera det, sätt USE_I18N
till True
, ladda det sedan med {% load i18n %}
.
Se specificera-översättningssträngar-i-template-kod.
l10n
¶
Det här biblioteket ger kontroll över lokaliseringen av värden i mallar. Du behöver bara ladda biblioteket med hjälp av {% load l10n %}
.
tz
¶
Detta bibliotek ger kontroll över tidszonskonverteringar i mallar. Precis som l10n
behöver du bara ladda biblioteket med {% load tz %}
, men du brukar också ställa in USE_TZ
till True
så att konvertering till lokal tid sker som standard.
Se tidszoner-i-mallar.
Andra taggar och filterbibliotek¶
Django levereras med ett par andra mall-taggbibliotek som du måste aktivera uttryckligen i din INSTALLED_APPS
-inställning och aktivera i din mall med {% load %}
-taggen.
django.contrib.humanize
¶
En uppsättning Django-mallfilter som är användbara för att lägga till en ”mänsklig touch” till data. Se django.contrib.humanize.
statisk
¶
statisk
¶
För att länka till statiska filer som sparas i STATIC_ROOT
levereras Django med en static
malltagg. Om appen django.contrib.staticfiles
är installerad kommer taggen att servera filer med url()
-metoden för den lagring som anges av staticfiles
i STORAGES
. Till exempel:
{% load static %}
<img src="{% static 'images/hi.jpg' %}" alt="Hi!">
Den kan också använda standardkontextvariabler, t.ex. genom att anta att en user_stylesheet
-variabel skickas till mallen:
{% load static %}
<link rel="stylesheet" href="{% static user_stylesheet %}" media="screen">
Om du vill hämta en statisk URL utan att visa den kan du använda ett lite annorlunda anrop:
{% load static %}
{% static "images/hi.jpg" as myphoto %}
<img src="{{ myphoto }}" alt="Hi!">
Använda Jinja2-mallar?
Se Jinja2
för information om hur du använder taggen static
med Jinja2.
”Hämta statiskt prefix¶
Du bör föredra malltaggen static
, men om du behöver mer kontroll över exakt var och hur STATIC_URL
injiceras i mallen kan du använda malltaggen get_static_prefix
:
{% load static %}
<img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!">
Det finns också ett andra formulär som du kan använda för att undvika extra bearbetning om du behöver värdet flera gånger:
{% load static %}
{% get_static_prefix as STATIC_PREFIX %}
<img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!">
<img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!">
get_media_prefix
¶
I likhet med get_static_prefix
, fyller get_media_prefix
en mallvariabel med mediaprefixet MEDIA_URL
, t.ex:
{% load static %}
<body data-media-url="{% get_media_prefix %}">
Genom att lagra värdet i ett dataattribut säkerställer vi att det escapas på lämpligt sätt om vi vill använda det i ett JavaScript-sammanhang.