base.html上的Django模板标签

时间:2014-04-13 15:40:25

标签: django

我有一个基页和一些带有视图的模板:

<!DOCTYPE html>
<head>
    <title>{% block title %}title{% endblock %}</title>
</head>

<body>
   <div id="userpanel"> 
      user panel
   </div>
   <div id="content">
        {% block content %}{% endblock %}
    </div>
</body>
</html>

{% extends "base.html" %}

{% block title %}some title{% endblock %}

{% block content %}
some content
{% endblock %}

我想在基页上添加用户面板。我可以以某种方式使用像if / for那样的模板标签吗? 我希望能够使用类似的东西:

{% if user.admin}
admin panel
{% endif %}

{% if user.moderator}
moderator panel
{% endif %}

1 个答案:

答案 0 :(得分:2)

上下文变量始终具有request.user(当前用户)。

所以你可以这样做: if request.user.is_superuser ... 和: 如果是request.user.is_staff ....

您可以在Admin.auth.user中分配两个变种。

关于制作作业标签的第二个问题,请参阅:here

# app/templatetags/mytags.py
@register.assignment_tag
def get_messages_list_for_user(user):
    list = Messages.objects.filter(owner=user)
    return list

然后在你去的模板中:

# base.html
{% load mytags %}
{% for m in get_messages_list_for_user request.user %}
{{ m.text }}
{% endfor %}

您始终拥有请求用户,因此您可以将其放在一个模板或基本模板中。