Django 模板过滤器语法错误

Posted

技术标签:

【中文标题】Django 模板过滤器语法错误【英文标题】:Django Template Filter Syntax error 【发布时间】:2015-08-20 04:24:12 【问题描述】:

我正在尝试使用此代码使用 django 内置的“默认”过滤器

% load sekizai_tags static compress i18n %
[...]
<title> title|default:"nothing" </title>

但它给了我以下异常

django.template.base.TemplateSyntaxError: default requires 2 arguments, 1 provided

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

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" 

我还尝试更改 title var 的名称,以确保它不是保留关键字。

【问题讨论】:

阅读本文可能会有所帮助groups.google.com/forum/#!topic/django-users/m4w-RNt-DOg 不幸的是,这并没有帮助,因为我实际上使用引号作为值,“无” 我不想问...但是你确定那条线是罪魁祸首吗?该模板中是否有任何其他过滤器或模板标签?你能在你的问题中展示更多你的模板吗? 您的上下文中是否有value 对象? 如果标题没有通过,你期望它如何工作? 【参考方案1】:

确保冒号后没有空格。

这是正确的:

 title|default:"nothing" 

这会引发异常:

 title|default: "nothing" 

【讨论】:

严重的是,在像 Django 这样的容错系统中,空间会搞砸事情吗?非常喜欢 Django 团队,我相信大家都非常努力,并且不收取任何费用,所以感谢你们的辛勤工作。但是一个空间,真的吗? 空间对我来说不是问题,但我会接受答案,因为似乎很多人都面临这个问题 @Iwan1993 如果您的问题不同,您能否发布另一个答案来解释问题所在?这可能对其他人有所帮助:) 老实说,一天后我决定重新启动项目——因为我从 ootb 进行了几次测试,一切正常。一定是在别处弄乱了配置。 :(【参考方案2】:

试试:

 title|default_if_none:"nothing" 

default_if_none 如果变量为“None”,将显示给定的字符串。

默认将在变量评估为 False 时显示字符串,即空字符串、空列表等

还要确保在你的上下文中发送 title 变量,否则你必须使用 default_if_none

【讨论】:

以上是关于Django 模板过滤器语法错误的主要内容,如果未能解决你的问题,请参考以下文章

Google App Engine 中的 Django 模板语法错误

Django 1.10 模板语法错误。您是不是忘记注册或加载此标签?

缺少变量值时 Django 模板中的 Javascript 语法错误

每当我将 Python 代码放入 Django 模板时都会出现语法错误

Django之模板语法

带有 Python 2.7.6 和 Virtualenv 12.0.7 (OSX10,10.2) 的 Django 1.7.6 - 模板呈现模板语法错误