Условное отображение кнопки на языке шаблонов DJANGO

#html #python-3.x #django #dom #django-templates

#HTML #python-3.x #django #dom #django-шаблоны

Вопрос:

У меня есть страница, на которой должна отображаться кнопка, если пользователь отмечен как «подлежащий оплате», в противном случае кнопка не должна отображаться. Я попробовал следующий код:

 {% if form_experfil.facturable %}
     <a href="{% url 'incid:xtodo' %}?pagref=factdatshow" type="button"
                       class="btn btn-primary waves-effect"> Consultar datos de facturación</a>                      
{% endif %} 
  

Но она продолжает отображаться. Этот и другие сбои заставляют меня думать, что поведение тега {% if %} не так просто, как я думал, и он не просто обрезает HTML-код до тега endif, но сначала что-то отображается. Есть ли где-нибудь, где это официально задокументировано без мистических ссылок?. Есть ли способ просто показать эту кнопку, когда у клиента есть эти данные, и не показывать ее в противном случае?.

Это представление:

 def perfil_view(request):
perfil = ExUserProfile.objects.get(user=request.user)
facturar = perfil.facturable
if facturar:
    factdat = Factdat.objects.get(cliente=request.user)
if request.method == 'POST':
    form_perfil = perfilEditForm(data=request.POST, instance=request.user)
    form_experfil = experfilEditForm(data=request.POST, instance=perfil)
    if facturar:
        form_factdat = factdatEditForm(data=request.Post, instance=perfil)
    if all([form_perfil.is_valid(), form_experfil.is_valid(), form_factdat.is_valid()]):
        form_perfil.save()
        form_experfil.save()
        form_factdat.save(commit=facturar)
        return HttpResponseRedirect('incid/perfil')
else:
    form_perfil = perfilEditForm(instance=request.user)
    form_experfil = experfilEditForm(instance=perfil)
    if facturar:
        form_factdat = factdatEditForm(instance=factdat)
template = "incid/perfil.html"
if facturar:
    return render(request, template, {
        'form_perfil': form_perfil,
        'form_experfil': form_experfil,
        'form_factdat': form_factdat
    })
else:
    return render(request, template, {
        'form_perfil': form_perfil,
        'form_experfil': form_experfil
    })
  

и это модели:

 eclass ExUserProfile(models.Model):
user = models.OneToOneField(User,
                            primary_key=True,
                            on_delete=models.DO_NOTHING)
logo = ResizedImageField(size=[200, 200],
                         crop=['middle', 'center'],
                         quality=75, upload_to='static/logos/',
                         default='logos/no-img.jpg')
facturable = models.BooleanField(default=False)

def __str__(self):
    return str(self.user)


class Factdat(models.Model):
    cliente = models.OneToOneField(User,
                                   verbose_name='cliente_fact',
                                   primary_key=True,
                                   default='',
                                   on_delete=models.DO_NOTHING)
    nomfact = models.CharField(max_length=240,
                               verbose_name='nomfact')
    niffact = models.CharField(max_length=16,
                               verbose_name='niffact')
    mailfact = models.EmailField(max_length=254,
                                 verbose_name='mailfact')
    telfact = models.CharField(max_length=24,
                               verbose_name='telfact')
    persfact = models.CharField(max_length=128,
                                verbose_name='persfact')

    class Meta:
        verbose_name = "Fact_dat"
        verbose_name_plural = "Fact_datos"

    def __str__(self):
        return str(self.cliente)
  

и на всякий случай, вот полная страница:

 def perfil_view(request):
perfil = ExUserProfile.objects.get(user=request.user)
facturar = perfil.facturable
if facturar:
    factdat = Factdat.objects.get(cliente=request.user)
if request.method == 'POST':
    form_perfil = perfilEditForm(data=request.POST, instance=request.user)
    form_experfil = experfilEditForm(data=request.POST, instance=perfil)
    if facturar:
        form_factdat = factdatEditForm(data=request.Post, instance=perfil)
    if all([form_perfil.is_valid(), form_experfil.is_valid(), form_factdat.is_valid()]):
        form_perfil.save()
        form_experfil.save()
        form_factdat.save(commit=facturar)
        return HttpResponseRedirect('incid/perfil')
else:
    form_perfil = perfilEditForm(instance=request.user)
    form_experfil = experfilEditForm(instance=perfil)
    if facturar:
        form_factdat = factdatEditForm(instance=factdat)
template = "incid/perfil.html"
if facturar:
    return render(request, template, {
        'form_perfil': form_perfil,
        'form_experfil': form_experfil,
        'form_factdat': form_factdat
    })
else:
    return render(request, template, {
        'form_perfil': form_perfil,
        'form_experfil': form_experfil
    })
  

Комментарии:

1. if Инструкция выглядит нормально. Можем ли мы увидеть ваши модели и представления

2. Вот они.