Seite 1 von 1

[Django] RequestContext im Template Tag (inclusion_tag)?

Verfasst: Dienstag 1. Juni 2010, 16:16
von nexonic
Hi,

ich habe eine Frage zu Template Tags bzw. speziell zum inclusion_tag.

Wenn man in einer View dem Template die Daten mit dem RequestContext gibt, also so z.B.:

Code: Alles auswählen

    return render_to_response(
        'myapp/index.html',
        {foo: 'foo', bar: 'bar},
        context_instance = RequestContext(request),
    )
...dann hat man ja in diesem Template auch Variablen wie "user" für den aktuellen Benutzer usw.

Nun habe ich aber noch ein Inclusion-Tag, z.B. so:

Code: Alles auswählen

@register.inclusion_tag(
    'myapp/templatetags/foo2.html',
    takes_context=True
)
def foobar(context, foo2):
    data = {
        'foo2': foo2
    }
    return data
In dem Template "foo2.html" habe ich so aber keinen Zugriff auf Variablen wie "user". Weiß jemand, wie man das bewerkstelligen kann?

Gruß
nexonic

Re: [Django] RequestContext im Template Tag (inclusion_tag)?

Verfasst: Dienstag 1. Juni 2010, 17:08
von tordmor

Code: Alles auswählen

@register.inclusion_tag(
    'myapp/templatetags/foo2.html',
    takes_context=True
)
def foobar(context, foo2):
    data = {
        'foo2': foo2
    }
    data.update(context)
    return data

Re: [Django] RequestContext im Template Tag (inclusion_tag)?

Verfasst: Dienstag 1. Juni 2010, 19:46
von nexonic
Perfekt, danke :)

Allerdings musste ich es genau andersherum machen, da `context` ja kein dict ist und ich deshalb diesen Fehler bekommen habe:

Code: Alles auswählen

Caught an exception while rendering: dictionary update sequence element #1 has length 1; 2 is required
So also:

Code: Alles auswählen

@register.inclusion_tag(
    'myapp/templatetags/foo2.html',
    takes_context=True
)
def foobar(context, foo2):
    data = {
        'foo2': foo2
    }
    context.update(data)
    return context