/ / Šablóna Django - názov dynamickej premennej - django

Django šablóna - dynamický názov premennej - django

Dobrý deň,

Ako môžem použiť názov premennej premennej v šablónach Django?

Mám vlastný systém overovania pomocou context, has_perm skontroluje, či má používateľ prístup do zadanej sekcie.

deptauth je premenná s názvom obmedzovacej skupiny, tj. SectionAdmin. Myslím has.perm v skutočnosti kontroluje "deptauth" namiesto hodnoty premennej SectionAdmin ako by som chcel.

{%if has_perm.deptauth %}

Ako to môžem spraviť? has_perm.{{depauth}} alebo niečo podobné?

EDIT - Aktualizovaný kód

{% with arg_value="authval" %}
{% lookup has_perm "admintest" %}
{% endwith %}

{%if has_perm.authval %}
window.location = "./portal/tickets/admin/add/{{dept}}/"+val;
{% else %}
window.location = "./portal/tickets/add/{{dept}}/"+val;
{%endif%}

has_perm nie je objekt .. je to v mojom kontextovom procesore (permchecker):

class permchecker(object):

def __init__(self, request):
self.request = request
pass

def __getitem__(self, perm_name):
return check_perm(self.request, perm_name)

odpovede:

3 pre odpoveď č. 1

Najlepšie je písať svoje vlastné vlastná značka šablóny pre to. Nie je to ťažké urobiť a pre túto situáciu je to normálne.

Toto som netestoval, ale niečo v tomto zmysle by malo fungovať. Nezabudnite na správne zaobchádzanie s chybami!

def lookup(object, property):
return getattr(object, property)()

register.simple_tag(lookup)

Ak sa snažíte získať nehnuteľnosť namiesto vykonania metódy, odstráňte ich ().

a používajte ho:

{% lookup has_perm "depauth" %}

Poznač si to has_perm je premenná a "depauth" je hodnota reťazca. to odovzdá reťazec na vyhľadanie, t. j. get has_perm.depauth.

Môžete to nazvať premennou:

{% with arg_value="depauth_other_value" %}
{% lookup has_perm arg_value %}
{% endwith %}

čo znamená, že na jeho vyhľadanie bude použitá hodnota premennej, t.j. has_perm.depauth_other_value".


1 pre odpoveď č. 2

Môžete to vyskúšať takto,

{{ dict|key:key_name }}

Filter:

def key(d, key_name):
return d[key_name]
key = register.filter("key", key)

Viac informácií, django lístok