首页 > 解决方案 > 如何在我的模板 Django 中显示我需要的按钮?

问题描述

我需要:

1)如果用户通过表单创建了类的对象,那么他会看到调用对象详细信息网页的按钮。

2) 如果一个用户没有创建该类的对象,但另一个用户创建了,那么他会看到调用该表单创建对象的按钮,并且该用户将成为该对象的作者。

3) 如果用户没有通过表单创建类的对象,那么他会看到调用该表单的按钮。

如果用户没有创建该类的对象,但另一个用户创建了,那么他会看到调用此表单以创建对象的按钮,并且该用户将成为该对象的作者。

我做的:

{% if list %}
    {% for i in list %}
        {% if request.user == i.author %}
            <a class="btn" href="{% url 'detail' i.id %}" role="button">
              {{i.detail}}
            </a>
        {% else %}
           <button type="button" class="btn" data-toggle="modal" data-target="#form">
                 the form button
           </button>
        {% endif %}
    {% endfor %}
    </div>
{% else %}
    <button type="button" class="btn btn-primary mr-4" data-toggle="modal" data-target="#digital">
      Кнопка для вызова формы
    </button>
{% endif %}

但是如果用户创建了一个类的对象,那么他会看到这两个按钮。

标签: django-templates

解决方案


视图.py

class MyClassCreateView(LoginRequiredMixin, CustomSuccessMessageMixin, CreateView):
model = MyClass
template_name = 'mypage.html'
form_class = MyClassForm
success_url = reverse_lazy('mypage')
success_msg = 'сохранён'
def get_context_data(self, **kwargs):
    kwargs['list_mylist'] = MyClass.objects.all()
    list_mylist = kwargs['list_mylist']
    for i in list_mylist:
        if i.author == self.request.user:
            print('my_button')
            kwargs['my_button'] = True
            break
    return super().get_context_data(**kwargs)

模板

        {% if my_button %}
       {% for i in list_mylist %}
             {% if request.user == i.author %}
                <a class="btn btn-primary" href="#" role="button">
                  кнопка первая
                </a>
             {% endif %}
       {% endfor %}
{% else %}
    <button type="button" class="btn btn-primary mr-4" data-toggle="modal" data-target="#class">
          кнопка вторая
        </button><br>
    {% endif %}

推荐阅读