2014-03-04 142 views
0

我的观点给我的列表或报告,而当前用户呼叫方法

在我的模板我想做的事:

{% for report in reports %} 
    ... 
    {% if current_user.can_edit_report(report) == True %} 
     ... 
    {% endif %} 
    ... 
{% endfor %} 

但是罚球英里一个错误

Could not parse the remainder: '(report)' from 'current_user.can_edit_report(report)' 

因为Django似乎无法使用模板中的参数调用方法。

所以,我必须这样做在查看...

你有一个想法怎么做是否正确?

由于

+0

也:http://stackoverflow.com/questions/1333189/django-template-system-calling -a-功能里面,一个模型 – danihp

回答

1

是,如上文所注释,这个问题有重复(How to call function that takes an argument in a Django template?)。

你想要做什么是创建一个自定义模板标签(https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-tags)是这样的...

# template 
<p>Can Edit: {% can_edit_report user_id report_id %}.</p> 

# template_tags.py 
from django import template 

def can_edit_report(parser, token): 
    try: 
     # tag_name is 'can_edit_report' 
     tag_name, user_id, report_id = token.split_contents() 
     # business logic here (can user edit this report?) 
     user = User.objects.get(pk=user_id) 
     report = Report.objects.get(pk=report_id) 
     can_edit = user.can_edit_report(report) 
    except ValueError: 
     raise template.TemplateSyntaxError("%r tag requires two arguments" % token.contents.split()[0]) 
    return can_edit