我在base.html
中有一个my_project/jinja2/
,它包含网站<body>
以外的所有内容。然后,我们将base.html
扩展为。{/ p>
在此示例中,我将base.html
从应用people
扩展到my_project/people/jinja2/people/people_list.html
的文件中,使用以下内容:
{% extends "base.html" %}
{% block content %}
<!-- Some html -->
{% endblock content %}
我的base.html
包含指向<head>
中博客rss Feed的链接,如下所示:
<link rel="alternate" type="application/atom+xml" title="Blog" href="{{ url('blog:articles_feed') }}" />
这适用于大多数地方,例如my_project/jinja2/index.html
和my_project/jinja2/blog_list.html
,但在第3个应用people
中,我在同一行模板代码中收到以下错误:
AttributeError: 'str' object has no attribute '__call__'
由于jinja2有更好的调试,我可以在werkzueg中运行python并查看可能发生的一些潜在细节:
locals()
输出:
{
'_': {...},
'static': < bound method StaticFilesStorage.url of < django.contrib.staticfiles.storage.StaticFilesStorage object at 0x7f423ec3ebe0 >> ,
'joiner': < class 'jinja2.utils.Joiner' > ,
'request': < WSGIRequest: GET '/case-studies/hog?__debugger__=yes&cmd=locals()&frm=139922493301984&s=XfAagGnpxRWFBRRd0Uzk' > ,
'page': None,
'csrf_input': < django.utils.functional.lazy. < locals > .__proxy__ object at 0x7f423e8262e8 > ,
'cycler': < class 'jinja2.utils.Cycler' > ,
'dict': < class 'dict' > ,
'absolute_url': < function absolute_url at 0x7f423ece5b70 > ,
'lipsum': < function generate_lorem_ipsum at 0x7f423ebfc8c8 > ,
'view': < leaf.views.LeafTemplateView object at 0x7f423e820198 > ,
'range': < class 'range' > ,
'ngettext': < function ungettext at 0x7f42450547b8 > ,
'gettext': < function ugettext at 0x7f4245054730 > ,
'absolute_root': < function absolute_root at 0x7f423ece8268 > ,
'datetime': < class 'datetime.datetime' > ,
'csrf_token': < django.utils.functional.lazy. < locals > .__proxy__ object at 0x7f423e826400 > ,
'url': 'people/all'
}
我不确定这是否是一个正确的假设,但是url
没有正确地作为函数添加到环境中,而是一个字符串呢?它在我的jinja2.py文件中,并在jinja2模板中按预期工作。是什么给了什么?
答案 0 :(得分:1)
Selcuk had the right idea。我使用的是jinja模板,kwargs
会自动添加。我的kwargs
之一是<url>
并且超过了我添加到jinja环境中的url
扩展名。将kwarg
重命名为其他内容可以解决问题。