获取登录用户信息Django-tempatetags包含标记方法?

问题描述 投票:1回答:1

我正在尝试通过创建自定义模板标签的用户来渲染导航菜单中已登录用户名。 PFB代码,

@register.inclusion_tag('kpt/navbar.html')
def getmenu( params ):
  raw = params.split("|")
  active_item = raw[0]
  menus = [
    {"name": "Home", "url": "/kpt/", "class":""},
    {"name": "High CPC", "url": "/kpt/hcpc", "class":""},
    {"name": "Trending Keywords", "url": "/kpt/tcpc","class":""}
  ]
  for menu in menus:
    if menu["name"] == str(active_item):
      menu["class"] = "active"
  return {'menus':menus, "user":raw[1] }

我想在此方法中检索登录用户全名,而不依赖于从模板传递它,因为那时我需要将变量与静态字符串连接起来。 Jinja不支持哪个!像这样的东西:

{% getmenu "Home|MD Danish" %}

MD丹麦语将在{{user.get_full_name}}中

请帮忙!

python django django-models django-templates django-views
1个回答
0
投票

您可以在下面注册templatetag。只需通过takes_context=True注册您的inclusion_tag

@register.inclusion_tag('kpt/navbar.html', takes_context=True)  # This will get context data from view / template
def getmenu(params):
     # Here you can get user as below
    user = params.request.user
    raw = params.split("|")
      active_item = raw[0]
      menus = [
        {"name": "Home", "url": "/kpt/", "class":""},
        {"name": "High CPC", "url": "/kpt/hcpc", "class":""},
        {"name": "Trending Keywords", "url": "/kpt/tcpc","class":""}
      ]
      for menu in menus:
        if menu["name"] == str(active_item):
          menu["class"] = "active"
      return {'menus':menus, "user":raw[1] }
© www.soinside.com 2019 - 2024. All rights reserved.