Gå til innhold

[django] request.GET i templatetags


Anbefalte innlegg

Videoannonse
Annonse

Dette er en smule mer innviklet enn det burde være (og litt skyldes at du bruker inclusion tag).

 

Først og fremst: du ønsker at HttpRequest-instansene er tilgjengelige i template-konteksten og for å få til det må du ha django.core.context_processors.request i TEMPLATE_CONTEXT_PROCESSORS - dette ordner du i settings.py.

 

Dessverre er ikke dette nok. I tillegg må du sende med en RequestContext-instans når du rendrer templaten, render_to_response gjør for eksempel ikke dette default, du må be om det eksplisitt:

 

def myview(request):
   return render_to_response('template.html', context_instance=RequestContext(request))

Når du eksplisitt bruker en RequestContext vil alle context processors du har satt opp i settings.py eksekveres og siden vi satte opp context_processors.request vil HttpRequest-instansen bli en del av template contexten.

 

Hadde du brukt en vanlig template tag kunne du nå brukt context['request'].GET i python-koden din, men siden du bruker inclusion tag må du belage deg på enda mer sprell :)

 

Inclusion tags antar nemlig at du ønsker en kliss ny template context, men du kan trikse det til ved å hente ut request-instansen fra parent-context og returnere den fra inclusion tagen din:

 

@register.inclusion_tag("template.html", takes_context=True)
def my_inclusion_tag(context, myparam):
   return {"inclusion_param": myparam, "request": context['request']}

 

Tungvindt? Jada.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...