Исключение TypeError: аргумент должен быть int или float для аргумента представления внутри шаблона - PullRequest
1 голос
/ 22 апреля 2019

Я пытаюсь проверить, есть ли какие-либо продукты в productList, но это показывает:

Значение исключения: аргумент должен быть int или float - в этой строке {% для p в productList%}in home.html

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

Заранее благодарим за вашу помощь!


views.py

from django.shortcuts import render
from .models import Product

def home(request):
    context = {'productList': Product.objects.all() }
    return render(request, 'main/home.html', context)

models.py

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length = 200)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    description = models.TextField()
    def __str__(self):
        return self.name

home.html

{% load static %}
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Logo</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="{% static 'main/css/main.css' %}"/>
</head>
<body>
<div id="mainWrapper">
  <header> 
    <div id="logo"> <!-- <img src="logoImage.png" alt="Logo"> --> 
      LogoName </div>
    <div id="headerLinks">
      <a href="#" title="Login/Register">Login/Registo</a>
      <a href="#" title="Cart">Carrinho de Compras</a></div>
  </header>
  <nav> <a href="1/">1</a> <a href="2/">2</a> <a href="3/">3</a><a href="4/">4</a> <a href="5/">5</a> <a href="6/">6</a> <a href="7/">7</a></nav>
  <section id="offer">
    <h2>Something</h2>
    <p>Something Something</p>
  </section>
<div id="content">
    <section class="sidebar"> 
      <input type="text"  id="search" value="search">
      <div id="menubar">
        <nav class="menu">
          <h2> 1 </h2>
          <hr>
          <ul>
            <li><a href="#" title="Link">Link 1</a></li>
            <li><a href="#" title="Link">Link 2</a></li>
            <li><a href="#" title="Link">Link 3</a></li>
            <li class="notimp"><a href="#"  title="Link">Link 4</a></li>
          </ul>
        </nav>
        <nav class="menu">
          <h2> 2 </h2>
          <hr>
          <ul>
            <li><a href="#" title="Link">Link 1</a></li>
            <li><a href="#" title="Link">Link 2</a></li>
            <li><a href="#" title="Link">Link 3</a></li>
            <li class="notimp"><a href="#" title="Link">Link 4</a></li>
          </ul>
        </nav>
      </div>
    </section>
    <section class="mainContent">
      {% for p in productList %}

      {% endfor %}
    </section>
  </div>
  <footer> 
    <div>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam varius sem neque. Integer ornare.</p>
    </div>
    <div>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam varius sem neque. Integer ornare.</p>
    </div>
    <div class="footerlinks">
      <p><a href="#" title="Link">Link 1 </a></p>
      <p><a href="#" title="Link">Link 2</a></p>
      <p><a href="#" title="Link">Link 3</a></p>
    </div>
  </footer>
</div>
</body>
</html>

Редактировать: журнал ошибок

http://dpaste.com/1HW39KS

Ответы [ 3 ]

1 голос
/ 22 апреля 2019

Ваш тег set устанавливает значение как string. поэтому i теперь является строкой, поэтому вы не можете использовать тег divisibleby.

{% if productList %}
    {% for p in productList %}
       {% with i=forloop.counter % }
           {% if i|add:"-1"|divisibleby:4 %}
               {# do whatever here #}
           {% endif %}
           {{ p.price }}
           {{ p.name }}
       {% endwith %}
{% endif %}
1 голос
/ 22 апреля 2019

Спасибо за все ваши ответы и предложения!@MarkBailey указал, что ошибка была из-за ошибки заполнения базы данных, и это имело место.У меня была запятая вместо десятичной точки в одном из полей цены.

1 голос
/ 22 апреля 2019

попробуйте это

{% with i=forloop.counter %}
       {{i|add:"-1"}}
{% endwith %}

обратитесь это

надеюсь, что это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...