Как сделать в шаблонизаторе Django отображение нужной мне кнопки?

Задача такая:

Если юзер не создавал экземпляр в форме, то он видит кнопку по которой вызывается форма. Если юзер уже создавал экземпляр и он является автором одного из них, то он видит кнопку по которой переходит на страницу просмотра уже созданого ранее им экземпляра. Если юзер не создавал экземпляр, но уже есть экземпляры созданные другими юзерами, то он видит кнопку по которой вызывается форма.

Я сделал так.

{% 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">
                 Кнопка для вызова формы
           </button>
        {% endif %}
    {% endfor %}
    </div>
{% else %}
    <button type="button" class="btn btn-primary mr-4" data-toggle="modal" data-target="#digital">
      Кнопка для вызова формы
    </button>
{% endif %}

Но так не работает. Если юзер уже создал эеземпляр, то он видит кнопку с переходом на страницу готового эеземпляра и кнопку для создания нового.


Ответы (1 шт):

Автор решения: Sergei Sokov

Спасибо всем кто мне помог, список: никто, никто, никто

Вот решение:

Нужно в views.py сделать проверку и там прервать цикл. Так как в шаблоне нельзя использовать break

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)

в шаблоне проверка по my_button

    {% 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 %}
→ Ссылка