Теги пользовательского шаблона Django: объект ‘str’ не имеет атрибута ‘notification_set’

#django #django-templates

#django #django-шаблоны

Вопрос:

При определении пользовательского тега шаблона, который действует на верхнем уровне base.html (не база на уровне приложения) У меня возникла проблема с запросом, который отлично выполняется в оболочке.

Например,

 from django.contrib.auth.models import User
u = User.objects.get(pk=3)
u.notification_set.filter(viewed=False).count() # returns 1 as expected
 

Однако в теге шаблона это выдает странную ошибку

 AttributeError at /mynotes/

'str' object has no attribute 'notification_set'
 

. вот где у меня есть управление.py и вот пользовательский тег шаблона:

./app/templatetags/mytags.py

 from django import template

register = template.Library()

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

./templates/base.html

 {% load mytags %}
...
{% unread request.user%}
 

РЕДАКТИРОВАТЬ: ./app/models.py

 class Notification(models.Model):
    message = models.TextField()
    notification_for_user = models.ForeignKey(User)
    viewed = models.BooleanField(default=False)
    ... 
 

Комментарии:

1. Можете ли вы показать models.py часть?

2. @anhtran Я обновил вопрос.

Ответ №1:

Понял. Изменено

 {% unread request.user %}
 

Для

 {% unread user%}
 

и это работает. 10 для тех, кто объяснит эту ошибку.

Комментарии:

1. Вы добавили django.core.context_processors.request TEMPLATE_CONTEXT_PROCESSORS в настройки?

2. @anhtran нет, я этого не делал. В шаблонах уровня приложения мне не нужно было его использовать, потому что я предполагаю, что контекст автоматически передается представлением, тогда как в случае base.html , не было никакого представления. Спасибо.