Как сделать в шаблонизаторе 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 шт):
Спасибо всем кто мне помог, список: никто, никто, никто
Вот решение:
Нужно в 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 %}