django.template.base.TemplateSyntaxError: 默认值需要2个参数,但只提供了1个

31
我正在尝试使用Django内置的“default”过滤器,使用以下代码。
<title>{{ title|default :"nothing" }}</title>

但是它给了我以下异常

django.template.base.TemplateSyntaxError: default 需要2个参数,但只提供了1个

我正在使用以下设置作为我的模板后端

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            str(APPS_DIR.path('templates')),
        ],
        'OPTIONS': {
            'debug': DEBUG,
            'loaders': [
                'django.template.loaders.filesystem.Loader',
                'django.template.loaders.app_directories.Loader',
            ],
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'allauth.account.context_processors.account',
                'allauth.socialaccount.context_processors.socialaccount',
                'django.template.context_processors.i18n',
                'django.template.context_processors.media',
                'django.template.context_processors.static',
                'django.template.context_processors.tz',
                'django.contrib.messages.context_processors.messages',
                'sekizai.context_processors.sekizai',
            ],
        },
    },
]

我的编辑器将代码标记为无效,但我检查了一千次 https://docs.djangoproject.com/en/1.8/ref/templates/builtins/ 这是一个例子。
{{ value|default:"nothing" }}

我还尝试更改标题变量的名称,以确保它不是一个保留关键字。

1
很不幸,那并没有帮助,因为我实际上是在使用引号来表示值的,"nothing"。 - Iwan1993
我很不想问...但你确定那一行是罪魁祸首吗?你的模板中还有其他过滤器或模板标签吗?你能在问题中展示更多的模板内容吗? - rnevius
1
你的上下文中是否有一个 value 对象? - Daniel Roseman
@DanielRoseman 不,value|default代码片段实际上是一个Django示例,我正在努力理解开始的标题内容,同时标题不是一个对象,简单地说就是没有在上下文中传递。 - Iwan1993
1
如果没有传递标题,你怎么期望它能工作呢? - Daniel Roseman
显示剩余11条评论
3个回答

58

请确保冒号后面没有空格。

这是正确的写法:

{{ title|default:"nothing" }}

这会抛出一个异常:

{{ title|default: "nothing" }}

5
在像Django这样的容错系统中,一个空格会导致问题吗?非常感谢Django团队,我相信大家都很努力而且不收取任何费用,所以感谢你们所有的辛勤工作。但是,一个空格,真的吗? - MikeyE
对我来说,空间不是问题,但我会接受这个答案,因为似乎很多人都面临这个问题。 - Iwan1993
1
@Iwan1993 如果你的问题不同,请发表另一个答案解释问题出在哪里?这可能会帮助其他人 :) - Thierry J.
老实说,一天之后我决定重新启动项目——因为我从OOTB制作了几个测试,一切都正常工作。肯定是在其他地方弄错了配置。 :( - Iwan1993

3

请尝试:

{{ title|default_if_none:"nothing" }}

default_if_none会在变量为“None”时显示给定的字符串。

default会在变量求值为False时显示字符串,即空字符串、空列表等。

另外,请确保在您的上下文中发送title变量,如果没有,则必须使用default_if_none


0

使用Django模板过滤器,在:之前或之后添加空格会出现以下错误:

             # Space (Error)
                 
{{ title|default : "nothing" }}

所以,请不要在那里放任何空格,以免出现以下错误。
          # No space (No error)
               ↓ ↓
{{ title|default:"nothing" }}

此外,在 | 前后添加空格都不会出错:

     # Space (No error)
        ↓ ↓
{{ title | default:"nothing" }}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接