gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:48:47 30 4
gpt4 key购买 nike

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

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

一种方法是创建三个模板(一个带有加入链接,一个带有离开链接,一个没有链接)并在 View 中选择合适的模板。我觉得拥有三个仅在一行代码中有所不同的不同模板可能有点矫枉过正,所以到目前为止我还没有走那条路。

仅使用模板显示条件 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

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

谢谢!

最佳答案

One way of doing this would be to create three templates (one with the join link, one with the leave link, and one with no link) and choose the appropriate one in the view

这很有趣,因为如果您可以选择要包含的模板,您就可以只选择要显示的 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 %}

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

If I do that, how can I get the currently logged in user within that method?

self.request.user
self.request.user.is_authenticated() # return True if the user is logged in

关于python - Django 模板 - 有条件地为登录用户显示一个按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11454140/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com