謝謝你的提示,Gerry。我發現按照您的建議編寫自定義模板標籤是最佳選擇。 這裏是血淋淋的細節,以防止任何人絆倒這一點。
在視圖的方法,我出版了一本字典「user_activity_status」,其中包含activity.id和UserActivityWork對象的價值,爲登錄用戶的工作,對活動
關鍵這是對的相關章節模板。基本上,這將增加一個變量「map_value」與
getattr(user_activity_status[activity.id], "comment")
這裏的值是模板:
{% load *file-name-of-the-templatetag-file* %}
{% access_map_method user_activity_status activity.id comment %}
{% if map_value %}
{{ map_value }}
{% else %}
get working sucka!
{% endif %}
這裏是templatetag文件的部分(見格里的鏈接,細節如何設置此)
from django import template
register = template.Library()
@register.tag(name="access_map_method")
def do_access_map_method(parser, token):
try:
tag_name, dict_name , key_name, method_name = token.contents.split()
except ValueError:
msg = '%r tag requires three arguments' % token.contents[0]
raise template.TemplateSyntaxError(msg)
return MapNode(dict_name , key_name, method_name)
class MapNode(template.Node):
def __init__(self, dict_name, key_name, method_name):
self.dict_var = template.Variable(dict_name)
self.key_var = template.Variable(key_name)
self.method_name = method_name
def render(self, context):
try:
dict_obj = self.dict_var.resolve(context)
key_obj = self.key_var.resolve(context)
if key_obj in dict_obj.keys():
if self.method_name:
context['map_value'] = getattr(dict_obj[key_obj], self.method_name)
else:
context['map_value'] = dict_obj[key_obj]
else:
context['map_value'] = ''
except template.VariableDoesNotExist:
context['map_value'] = ''
return ''