Vor kurzem habe ich gerade angefangen, Python für die Datenanalyse usw. zu verwenden. Als ich Django für WebView mit Python verwendete, habe ich versucht, einen benutzerdefinierten Filter zu erstellen und darauf zu verweisen, um von der Vorlagenseite auf das Wörterbuchobjekt zu verweisen. Als ich das tat, gab es einen Teil, von dem ich süchtig war, also werde ich ihn hier aufschreiben.
Eine der Funktionen, die in der Django-Vorlage aufgerufen werden können http://django-docs-ja.readthedocs.org/en/latest/howto/custom-template-tags.html
Benutzerdefinierter Filter, der auf ein Wörterbuchobjekt verweist templatetags/helper.py
from django import template
register = template.Library()
def get_dict_val(var,args):
dict_val = var
keys = [arg.strip() for arg in args.split(',')]
for key in keys:
dict_val = dict_val[key]
return dict_val
register.filter('dict_val',get_dict_val)
{{ dict_obj|get_dict_val:'key1,key2' }}
Auf diese Weise können Sie auf das Dictionary-Objekt verweisen. Sie können auf mehrstufige Objekte verweisen, indem Sie sie durch Kommas trennen.
{"1":{"0001":"Verkaufsabteilung"}}
Bei dieser Methode kann das Argument von der Vorlagenseite jedoch nur als Zeichenfolge verarbeitet werden, sodass Variablen nicht an den benutzerdefinierten Filter übergeben werden können. (Verarbeiten von Objekten in for-Schleifen usw.)
#Error
{% for row in data %}
<p>{{ dict_obj|get_dict_val:row.no,row.busho_code }}</p>
{% endfor %}
Einmal wurden die beiden Variablen durch ein Komma getrennt, um eine Zeichenfolge zu erstellen, und dann an das Argument übergeben.
def join_comma(var,args):
return "%s,%s" % (var,args)
register.filter('join_comma',join_comma)
{% for row in data %}
{% with row.no|join_comma:row.busho_code as shain_id %}
<p>{{ dict_obj|get_dict_val:shain_id }}</p>
{% endwith %}
{% endfor %}
Es scheint eine Debatte über benutzerdefinierte Filterargumente zu geben. https://code.djangoproject.com/ticket/1199
Ich denke, dass es notwendig ist, es so zu gestalten, dass es so weit wie möglich auf der Ansichtsseite ausgeführt werden kann, aber es kann Situationen geben, in denen die Vorlagenseite aufgrund der Spezifikationen direkt auf das Wörterbuchobjekt zugreifen muss. Deshalb habe ich die obige Methode verlassen.
Recommended Posts