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ď č. 1Najlepš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