我在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'对象不支持项目分配
任何人都可以帮助我吗?我知道类似的问题已经被问到堆栈溢出,但我经历了所有这些问题,但没有一个帮助过。
答案 0 :(得分:1)
您应该提供完整的追溯。
但是,我认为问题出在你的if user.is_anonymous
检查 - 如果是的话,你会返回一个空字符串。但是包含标记的返回值必须始终是上下文字典。你应该在那里返回一个空字典。