模板标记if语句是否存在参数问题

时间:2017-11-14 19:17:38

标签: python django

我创建了一个模板标记,以显示当前用户是否在基本模板中有任何未读通知。我认为我需要传递两个参数 - 一个用于确定我们只显示当前用户的通知(使用过滤器执行此操作),第二个用于返回,如果有任何未读通知(也使用过滤器) 。但是,我收到一个错误,说我只能通过一个参数,即使我需要两个。

这是我的模板标签:

@register.simple_tag(name='notseen')
def notseen():
    if UserNotification.objects.filter(toUser=User) and UserNotification.objects.filter(read=False).exists():
        print("True")
        return True
    else:
        print("False")
        return False

这是Traceback:

Traceback (most recent call last):
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/core/handlers/base.py", line 217, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/core/handlers/base.py", line 215, in _get_response
    response = response.render()
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/template/response.py", line 107, in render
    self.content = self.rendered_content
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/template/response.py", line 84, in rendered_content
    content = template.render(context, self._request)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/template/backends/django.py", line 66, in render
    return self.template.render(context)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/template/base.py", line 207, in render
    return self._render(context)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/template/base.py", line 199, in _render
    return self.nodelist.render(context)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/template/base.py", line 990, in render
    bit = node.render_annotated(context)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/template/base.py", line 957, in render_annotated
    return self.render(context)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/template/loader_tags.py", line 177, in render
    return compiled_parent._render(context)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/template/base.py", line 199, in _render
    return self.nodelist.render(context)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/template/base.py", line 990, in render
    bit = node.render_annotated(context)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/template/base.py", line 957, in render_annotated
    return self.render(context)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/template/defaulttags.py", line 322, in render
    return nodelist.render(context)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/template/base.py", line 990, in render
    bit = node.render_annotated(context)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/template/base.py", line 957, in render_annotated
    return self.render(context)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/template/library.py", line 203, in render
    output = self.func(*resolved_args, **resolved_kwargs)
  File "/Users/garrettlove/Desktop/evverest/notify/templatetags/notify_extras.py", line 11, in notseen
    if UserNotification.objects.filter(toUser=User) and UserNotification.objects.filter(read=False).exists():
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/db/models/query.py", line 784, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/db/models/query.py", line 802, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/db/models/sql/query.py", line 1250, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/db/models/sql/query.py", line 1276, in _add_q
    allow_joins=allow_joins, split_subq=split_subq,
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/db/models/sql/query.py", line 1210, in build_filter
    condition = self.build_lookup(lookups, col, value)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/db/models/sql/query.py", line 1104, in build_lookup
    return final_lookup(lhs, rhs)
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/db/models/lookups.py", line 24, in __init__
    self.rhs = self.get_prep_lookup()
  File "/anaconda3/envs/dev/lib/python3.6/site-packages/django/db/models/lookups.py", line 72, in get_prep_lookup
    return self.rhs._prepare(self.lhs.output_field)
TypeError: _prepare() takes 1 positional argument but 2 were given

修改 我在if语句中添加了print(myUser.__dict__),这是输出

{'__module__': 'django.contrib.auth.models', '__doc__': '\n    Users within the Django authentication system are represented by this\n    model.\n\n    Username, password and email are required. Other fields are optional.\n    ', '_meta': <Options for User>, 'DoesNotExist': <class 'django.contrib.auth.models.DoesNotExist'>, 'MultipleObjectsReturned': <class 'django.contrib.auth.models.MultipleObjectsReturned'>, 'get_next_by_date_joined': <function curry.<locals>._curried at 0x1024c3598>, 'get_previous_by_date_joined': <function curry.<locals>._curried at 0x1024c3620>, 'groups': <django.db.models.fields.related_descriptors.ManyToManyDescriptor object at 0x1024c7f98>, 'user_permissions': <django.db.models.fields.related_descriptors.ManyToManyDescriptor object at 0x1024d0630>, 'id': <django.db.models.query_utils.DeferredAttribute object at 0x1024d0748>, 'logentry_set': <django.db.models.fields.related_descriptors.ReverseManyToOneDescriptor object at 0x1024d0828>, 'userprofile': <django.db.models.fields.related_descriptors.ReverseOneToOneDescriptor object at 0x1024ee358>, 'userpost': <django.db.models.fields.related_descriptors.ReverseManyToOneDescriptor object at 0x1024f65c0>, 'post_likes': <django.db.models.fields.related_descriptors.ManyToManyDescriptor object at 0x1024f6630>, 'usercomment': <django.db.models.fields.related_descriptors.ReverseManyToOneDescriptor object at 0x1024eeeb8>, 'blogpost': <django.db.models.fields.related_descriptors.ReverseManyToOneDescriptor object at 0x1025065c0>, 'blogcomment': <django.db.models.fields.related_descriptors.ReverseManyToOneDescriptor object at 0x102506c50>, 'user': <django.db.models.fields.related_descriptors.ReverseManyToOneDescriptor object at 0x10250e6a0>, 'emailaddress_set': <django.db.models.fields.related_descriptors.ReverseManyToOneDescriptor object at 0x102548240>, 'socialaccount_set': <django.db.models.fields.related_descriptors.ReverseManyToOneDescriptor object at 0x10256a128>}

1 个答案:

答案 0 :(得分:1)

检查Python范围here

@register.simple_tag(name='notseen')
def notseen():
    # Add User varaible here
    myUser = get_user_model()
    if UserNotification.objects.filter(toUser=myUser) and UserNotification.objects.filter(read=False).exists():
        print("True")
        return True
    else:
        print("False")
        return False