#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 , не было никакого представления. Спасибо.