4

我的 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

如果我这样做,我怎样才能在该方法中获取当前登录的用户?如果这是不可能的,我还能从哪里获得模板之外的信息?有没有一种可接受的方法来做这样的事情?

谢谢!

4

3 回答 3

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 %}

你可以有:

{% 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 %}

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

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

self.request.user
self.request.user.is_authenticated() # return True if the user is logged in
于 2012-07-12T14:38:04.157 回答
0

您可以确定视图中的条件并使用上下文将适当的标志传递给模板。

如果有多个视图/模板需要此信息,您可以实现自定义上下文处理器,该处理器可以在上下文中添加此信息,并在每个模板中可用。

或者,如果您在应用程序中有任何OneToOne或任何此类关系User,您可以在该模型中实现方法。

于 2012-07-12T14:40:31.177 回答
0

您可以通过检查权限 https://docs.djangoproject.com/en/dev/topics/auth/来检查用户是否已登录,您也可以根据其他需要执行类似操作。

于 2012-07-12T14:41:13.810 回答