Django模板中的调用方法[重复]

Posted

技术标签:

【中文标题】Django模板中的调用方法[重复]【英文标题】:Call methods in Django Template [duplicate] 【发布时间】:2014-04-06 06:48:24 【问题描述】:

我的视图给我一个列表或报告和当前用户

在我想要做的模板中:

% 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 似乎无法在模板中调用带有参数的方法。

所以我必须在视图中这样做...

你知道如何正确地做到这一点吗?

谢谢

【问题讨论】:

还有:***.com/questions/1333189/… 【参考方案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

【讨论】:

以上是关于Django模板中的调用方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从模板调用 html

django的views直接传一段html代码调用模板中的js函数。

Django:如何从模板中识别调用视图?

django __unicode__() - 我如何在模板中调用此方法

为啥django不处理PUT方法带过来的表单

Django / Python:使用Template中的参数调用模型/类函数