Django模板 - 有条件地为登录用户显示按钮

jon*_*gan 4 python django django-templates

我的Django应用程序中有一个页面需要执行以下操作之一,具体取决于登录用户与页面上显示的组(不是Django用户组;我的应用程序自定义内容)相关的状态:

  1. 如果用户可以加入该组,则显示加入该组的链接.
  2. 如果用户在组中,则显示离开组的链接.
  3. 如果用户无法加入该组,请不要显示任何一个链接.

这样做的一种方法是创建三个模板(一个带有连接链接,一个带有离开链接,一个没有链接),并在视图中选择合适的一个.我觉得有三个不同的模板只会在一行代码中有所不同可能有点过头了,所以我还没有走过那条路.

不能仅使用模板显示条件1和2的正确内容,如果是,我不认为这是可取的.用户到组是多对多关系,确定组成员资格需要将用户传递给组或将组传递给用户.

由于Django模板不允许传递函数参数,我试图通过使用传递上下文变量来解决这个问题get_context_data.

def get_context_data(self, **kwargs):
    context = super(NetworkDetails, self).get_context_data(**kwargs)
    user = ???
    context['in_group'] = user.in_group(context['group_detail'])
    return context
Run Code Online (Sandbox Code Playgroud)

如果我这样做,如何在该方法中获取当前登录的用户?如果那是不可能的,我还可以在模板之外的哪些地方获取该信息?做这样的事情是否有可接受的方法?

谢谢!

jpi*_*pic 5

这样做的一种方法是创建三个模板(一个带有连接链接,一个带有离开链接,一个没有链接),并在视图中选择合适的一个

这很有趣,因为如果你可以选择要包含的模板,你可以选择要显示的html.代替:

{% if join_link %}
    {% include 'join_link.html' %}
{% endif %}
{% if leave_link %}
    {% include 'leave_link.html' %}
{% endif %}
{% if not join_link and not leave_link %}
    you can't join
{% endif %}
Run Code Online (Sandbox Code Playgroud)

你可能只有:

{% if join_link %}
    <a href="{{ join_link }}">join</a>
{% endif %}
{% if leave_link %}
    <a href="{{ leave_link }}">leave</a>
{% endif %}
{% if not join_link and not leave_link %}
    you can't join
{% endif %}
Run Code Online (Sandbox Code Playgroud)

所以,我不明白你为什么要使用模板包含.

如果我这样做,如何在该方法中获取当前登录的用户?

self.request.user
self.request.user.is_authenticated() # return True if the user is logged in
Run Code Online (Sandbox Code Playgroud)