Django: TemplateSyntaxError:无法解析余下部分

73
我在输入localhost:8000/admin/时遇到了这个问题。
“TemplateSyntaxError: 无法解析剩余部分:'admin:password_change',从而导致':password_change'。Django 1.5中的'url'语法已更改,请参阅文档。”
这是我的settings.py的一部分:
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'grappelli',
    'filebrowser',
    # Uncomment the next line to enable the admin:
     'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    #'django.contrib.admindocs',
     'tinymce',
     'sorl.thumbnail',
     'south',
     'django_facebook',
     'djcelery',
     'devserver',
     'main',
)
AUTH_USER_MODEL = 'django_facebook.FacebookCustomUser'

AUTHENTICATION_BACKENDS = (
    'django_facebook.auth_backends.FacebookBackend', 
    'django.contrib.auth.backends.ModelBackend',
    # Uncomment the following to make Django tests pass:
    'django.contrib.auth.backends.ModelBackend',
)

我做错了什么吗?

附注:这是我的完整回溯信息 https://gist.github.com/anonymous/e8c1359d384df7a6b405

编辑:

根据要求,我正在粘贴grep的输出结果:

$ ack-grep --type=python -r ':password_change' .
lib/python2.7/site-packages/django/contrib/admin/sites.py
264:url = reverse('admin:password_change_done', current_app=self.name)

lib/python2.7/site-packages/grappelli/dashboard/dashboards.py
147:reverse('%s:password_change' % site_name)],

$ ack-grep --type=html -r ':password_change' .
lib/python2.7/site-packages/django/contrib/admin/templates/admin/base.html
36:<a href="{% url 'admin:password_change' %}">{% trans 'Change password' %}</a> /

lib/python2.7/site-packages/grappelli/templates/admin/includes_grappelli/header.html
12:{% url admin:password_change as password_change_url %} 

1
你能否在整个文件夹中搜索:password_change,并显示包含该代码的模板? - karthikr
好的,谢谢。我刚刚粘贴了输出结果。 - xpanta
1
我刚遇到了这个问题,因为模板中的代码类似于{% if thing in ['literal', 'list', 'of', 'elements'] %},这在jinja中可行但在Django模板中不可行。 - Elias Dorneles
1
当你写成 {{ url .. 而不是 {% url .. 时,也会发生这种情况。 - Sławomir Lenart
10个回答

143

这个错误通常意味着您在尝试呈现的模板中忘记了关闭引号。例如:{% url 'my_view %}(错误)而不是{% url 'my_view' %}(正确)。在这种情况下,引起问题的是冒号。通常,您需要编辑模板以使用正确的{% url %} 语法

但是,Django管理网站没有理由抛出此异常,因为它知道自己的语法。因此,我最好的猜测是grapelli导致了您的问题,因为它更改了管理模板。从已安装应用程序中删除grappelli是否有帮助?


谢谢,我刚刚在我的虚拟环境中执行了一下grep命令,似乎与grapelli有关。这可以修复吗? - xpanta
5
好的,我把 {% url admin:password_change as password_change_url %} 改为 {% url 'admin:password_change' as password_change_url %}(添加单引号),看起来工作正常了。其他地方也需要添加单引号。需要更改的文件是 lib/python2.7/site-packages/grappelli/templates/admin/includes_grappelli/header.html - xpanta
6
我想补充一下,当我应该使用 {%%} 时,我误用了 {{}},导致出现了这个错误。 - Clint

12
对我来说,问题出在使用 {{ }} 而不是 {% %} :
href="{{ static 'bootstrap.min.css' }}"  # wrong
href="{% static 'bootstrap.min.css' %}"  # right

使用{{% %}}也会出现这个错误。 - Andrew Kelley

5

name 后面不应该有空格。

错误的做法:

{% url 'author' name = p.article_author.name.username %}

正确:

{% url 'author' name=p.article_author.name.username %}

2

模板语法错误:有很多原因,其中之一是 {{ post.date_posted|date: "F d, Y" }} 中冒号(:)和引号(")之间的空格,如果您删除空格,则会像这样工作.....{{ post.date_posted|date:"F d, Y" }}


根据错误信息,这似乎不是此问题语法错误的原因。 - kaya3

2
templates/admin/includes_grappelli/header.html 中,第12行,你忘记在 ' 之间添加 admin:password_change
Django 的 url 标签语法应该始终如下:
{% url 'your_url_name' %}

1

当你使用Jinja模板时(其调用对象方法的语法不同),如果你忘记在settings.py中设置它,也会出现这种情况。


<form action="{% url ('orders:remove' pizza_id=pizzacart.index(pizza)) %}"> {% csrf_token %} <button>从购物车中删除</button> </form> 你能找到这段代码中的错误吗?Pizzacart是一个包含比萨相关细节的列表,而pizza则代表其中的每一个。 - Irfan wani

1

对我来说,当我检查条件时: 这会产生错误:{%if number==10 %} 这解决了错误:{% if number == 10 %} #你可能注意到空格!


1
你在 settings.py 文件中缩进了部分代码:
# Uncomment the next line to enable the admin:
     'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    #'django.contrib.admindocs',
     'tinymce',
     'sorl.thumbnail',
     'south',
     'django_facebook',
     'djcelery',
     'devserver',
     'main',

因此,它会给出一个错误。

0

确保您正确使用静态文件和URL

<link href="{% static 'css/semantic.min.css' %}" rel="stylesheet">
  • 检查它是否被引号正确包围
  • 检查开头和结尾的括号
  • 检查标签是否被正确关闭

0
我遇到了同样的错误:
django.template.exceptions.TemplateSyntaxError: 无法解析剩余部分:':test',来自'my_app1:test'
因为我没有像下面所示使用引号来包裹my_app1:testurl tag。*自从Django 1.5以来,需要使用引号:
<a href="{% url my_app1:test %}">Test</a>
            {% ↑ No quotes  ↑ %}

所以,我在下面示例中使用引号对my_app1:test进行了标记,并在url标签中使用了。然后问题就解决了。
<a href="{% url 'my_app1:test' %}">Test</a>
             {% ↑   quotes   ↑ %}

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