2014-06-18 31 views
2

.是我的项目根目录,其中manage.py驻留。我有一个基地模板./templates/base.html。我在./app/templatetags/mytags.py如何在base.html中使用自定义模板标记

from django import template 

register = template.Library() 

@register.unread_tag 
def get_unread(user): 
    return user.notification_set.filter(viewed=False).count() 

如何使这种标签可用于base.html文件,使所有应用程序级的模板继承自定义模板标签。

+0

您是否尝试将'{%load mytags%}'放到'base.html'的顶部? – alecxe

+0

{%load mytags%}给我''Library'对象没有属性'unread_tag'' – yayu

回答

2

您的标签定义不正确。您需要使用register.simple_tag装饰:

@register.simple_tag(name='unread') 
def get_unread(user): 
    return user.notification_set.filter(viewed=False).count() 

然后,您需要将标签load到模板:

{% load mytags %} 

然后,您可以使用标签模板:

{% unread request.user %} 
+0

我用的是{%unread request.user%}我得到的错误是它需要两个参数并且只提供了1。在删除request.user并重新启动dev服务器时,错误保持不变。 – yayu

+0

@yayu gotcha,更新了答案,需要使用'simple_tag'。 – alecxe

+0

谢谢。在另一个说明中,我得到''str'对象没有属性'notification_set',它正在抛出'return user.notification_set.filter(viewing = False).count()'行。在shell中,当我尝试'u.notification_set.filter(viewing = False).count()'其中u是User实例时,我得到正确的答案。你知道为什么吗? – yayu

相关问题