'str'对象不支持项目分配

时间:2015-05-16 20:39:23

标签: django django-templates

我在django

中创建了一个自定义模板标记
disqusTag.py:

register = template.Library()
@register.inclusion_tag('polls/questionDetail.html', takes_context=True)
def disqus_sso(context):
    DISQUS_SECRET_KEY = getattr(settings, 'DISQUS_SECRET_KEY', None)
    if DISQUS_SECRET_KEY is None:
        return "<p>You need to set DISQUS_SECRET_KEY before you can use SSO</p>"

    DISQUS_PUBLIC_KEY = getattr(settings, 'DISQUS_PUBLIC_KEY', None)
    if DISQUS_PUBLIC_KEY is None:
        return "<p>You need to set DISQUS_PUBLIC_KEY before you can use SSO</p>"

    user = context['user']

    if user.is_anonymous():
        return ""

    data = json.dumps({
        'id': user.id,
        'username': user.username,
        'email': user.email,
    })

    # encode the data to base64
    message = base64.b64encode(data.encode('utf-8'))

    # generate a timestamp for signing the message
    timestamp = int(time.time())

    key = DISQUS_SECRET_KEY.encode('utf-8')
    msg = ('%s %s' % (message, timestamp)).encode('utf-8')
    digestmod = hashlib.sha1

    # generate our hmac signature
    sig = hmac.HMAC(key, msg, digestmod).hexdigest()

    return  dict(
        message=message,
        timestamp=timestamp,
        sig=sig,
        pub_key=DISQUS_PUBLIC_KEY,
    )

    t = get_template('polls/questionDetail.html')
    register.inclusion_tag(t)(disqus_sso)

我正在我的模板questionDetail.html中加载

{% load disqusTag %}
{% disqus_sso %}

但我收到此错误:'str'对象不支持项目分配

任何人都可以帮助我吗?我知道类似的问题已经被问到堆栈溢出,但我经历了所有这些问题,但没有一个帮助过。

1 个答案:

答案 0 :(得分:1)

您应该提供完整的追溯。

但是,我认为问题出在你的if user.is_anonymous检查 - 如果是的话,你会返回一个空字符串。但是包含标记的返回值必须始终是上下文字典。你应该在那里返回一个空字典。