如何在Django中创建详细的模板标记?

如何在Django中创建详细的模板标记?,django,django-templates,Django,Django Templates,我有以下包含标签: @register.inclusion_tag('bouts/fighter/_fighter_bout_list.html') def fighter_bout_list(list, header, fighter, has, empty): return { 'list' : list, 'header': header, 'fighter': fighter, 'ha

我有以下包含标签:

@register.inclusion_tag('bouts/fighter/_fighter_bout_list.html')
def fighter_bout_list(list, header, fighter, has, empty):
    return {
            'list' : list,
            'header': header,
            'fighter': fighter,
            'has' : has,
            'empty' : empty,
    }
要使用它,我可以在模板中包含以下内容:

{% fighter_bout_list wins "Wins" fighter "beat" "has no wins!" %}
但是,我希望使我的标记可读,以便更容易看到代码在做什么。理想情况下,我希望将其用于我的输入:

{% fighter_bout_list list=wins header="Wins" fighter=fighter has="beat" empty="has no wins!" %}

要做到这一点,最好的方法(甚至只是一个好方法!)是什么?

更改Django模板系统以满足您的需求将非常困难;如果你想这样做,首先要完全理解。坦率地说,我不建议创建一个使用与所有其他现有标记不同的参数处理方式的标记——这会让必须使用这些标记的用户感到困惑

但是,如果您坚持这样做,您只需要让您的自定义模板标记单独解析其参数来提供服务。像这样的事情应该可以做到:

def fixit( argument ):
    """Strip off any leading 'word=' noise words from argument"""
    result = argument.split('=')[-1]
    if result[0] == '"' and result[-1] == '"': 
        result = result[1:-2]
    return result

@register.inclusion_tag('bouts/fighter/_fighter_bout_list.html')
def fighter_bout_list(list, header, fighter, has, empty):
    return {
            'list' : fixit(list),
            'header': fixit(header),
            'fighter': fixit(fighter),
            'has' : fixit(has),
            'empty' : fixit(empty),
    }
已编辑

这段代码仍然是位置性的——我并不是建议您可以使用它来执行真正的关键字参数。我添加了一些代码来处理引号的存在,但我仍然没有测试它——这只是一个建议


我再次强烈建议不要采用这种方法。模板标记背后的要点是做一些使用现有模板标记无法轻松完成的事情,但它仍然是模板的一部分,并且确实有一个工具供足够技术的人使用HTML编辑器。我正试图为你提议的标签描绘一个用例,在这个用例中,它将在一个站点中被多次使用。与在不使用关键字参数的系统中为模板标记实现关键字参数相比,一点文档和一个示例要便宜得多。

为响应干杯。我想它能满足我的需求。我试试看。:-)试过了,但没用。我最初认为“list”和“fighter”不是字符串存在问题,但即使我重构了代码,使这两个参数保持位置不变,我还是在开始时遇到了一个错误:呈现时捕获了variabledeotenexist:在u'中查找键[header=“Wins”]失败。。。。整个回溯已发布到