jinja2模板中的url函数抛出Django

时间:2016-04-06 21:45:11

标签: python html django jinja2

我在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.htmlmy_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模板中按预期工作。是什么给了什么?

1 个答案:

答案 0 :(得分:1)

Selcuk had the right idea。我使用的是jinja模板,kwargs会自动添加。我的kwargs之一是<url>并且超过了我添加到jinja环境中的url扩展名。将kwarg重命名为其他内容可以解决问题。