You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django模板中向带多个as参数的模板标签传递多参数?

问题核心

你这个错误的根源是没搞懂Django模板标签里as的用法:

  • simple_tag只能返回单个结果,as的作用是把这个完整的返回值赋值给一个变量,没法拆分参数或者返回值同时给多个变量。
  • 你写的{% test "Anna" as f_name "Miller" as l_name %}完全不符合语法:as是标签的后缀,每个标签只能用一次as,而且所有参数必须放在as前面。你这种穿插参数和as的写法,会被Django当成多余的位置参数,所以才报“参数过多”的错。
解决办法

要分别拿到名和姓,得改自定义标签的返回值,让它能装下多个数据,之后在模板里拆出来用:

方案1:返回元组,按索引取值

修改标签代码:

from django.template import Library

register = Library()

@register.simple_tag
def test(first_name="John", last_name="Smith"):
    # 返回存有名和姓的元组
    return first_name, last_name

模板里这么用:

{% test "Anna" "Miller" as name_pair %}
{{ name_pair.0 }} {{ name_pair.1 }}

输出就是:Anna Miller

方案2:返回字典,按键取值

修改标签代码:

from django.template import Library

register = Library()

@register.simple_tag
def test(first_name="John", last_name="Smith"):
    # 返回存有名和姓的字典
    return {"first": first_name, "last": last_name}

模板里这么用:

{% test "Anna" "Miller" as name_info %}
{{ name_info.first }} {{ name_info.last }}

输出同样是:Anna Miller

额外说明
  • 你原来的标签返回的是拼接好的全名字符串,所以哪怕用as也只能拿到整个名字,拆不开。必须让标签返回能存多个值的结构(元组、字典都行)才行。
  • 记住:一个模板标签最多只能用一次as,用来捕获它的整个返回值,这是Django的语法规则。

内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:28:22