#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. Вот они.