Reputation: 39
i'm trying to create two pages for my website in django. One called home and other called fruits, but I get an Error: AttributeError at /'Home' object has no attribute 'get' The above 'Home' is a class in my models but I do not know why it says 'Home object no attribute get' when I have called Home.objects.all() in my views.py
My models:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=20)
price = models.FloatField()
stock = models.IntegerField()
image_url = models.CharField(max_length=2083)
class Home(models.Model):
heading = models.CharField(max_length=10)
words = models.CharField(max_length=10000)
My views:
from django.http import HttpResponse
from django.shortcuts render
from .models import Product, Home
def index(request):
products = Product.objects.all()
return render(request, 'index.html',
{'products': products})
def home(request):
home_obj = Home.objects.all()
return render(request, 'home.html',
{'Home': home_obj})
My app urls:
from django.urls import path
from . import views
app_name = 'polls'
urlpatterns = [
path('fruits/', views.index),
path('', views.Home),
]
index.html:
{% extends 'base.html' %}
{% block content %}
<div class="row">
{% for product in products %}
<div class="col">
<div class="card" style="width: 18rem;">
<img src="{{ product.image_url }}" class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">{{ product.name }}</h5>
<p class="card-text">₹ {{ product.price }}</p>
<a href="#" class="btn btn-primary">add to cart</a>
</div>
</div>
</div>
{% endfor %}
</div>
{% endblock %}
home.html:
<h2>{{ home_obj.heading }}</h2>
<p>{{ home_obj.words }}</p>
base.html:
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2"
crossorigin="anonymous">
<title>LibMax - Your trusted store</title>
</head>
<body>
<!-- As a link -->
<nav class="navbar navbar-light bg-light">
<a class="navbar-brand" href="#">LibMax</a>
</nav>
<div class="container">
<h2>Fruits</h2>
{% block content %}
{% endblock %}
</div>
<!-- Optional JavaScript; choose one of the two! -->
<!-- Option 1: jQuery and Bootstrap Bundle (includes Popper) -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx"
crossorigin="anonymous"></script>
<!-- Option 2: jQuery, Popper.js, and Bootstrap JS
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-
DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js"
integrity="sha384-
9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js"
integrity="sha384-w1Q4orYjBQndcko6MimVbzY0tgp4pWB4lZ7lr30WKz0vr/aWKhXdBNmNb5D92v7s"
crossorigin="anonymous"></script>
-->
</body>
</html>
The base.html can be found at https://getbootstrap.com/docs/4.5/getting-started/introduction/
under the starter templates section.
traceback:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/
Django Version: 3.1.2
Python Version: 3.8.3
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'products.apps.ProductsConfig']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "C:\Users\Ethan\anaconda3\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\Ethan\anaconda3\lib\site-packages\django\utils\deprecation.py", line 116, in __call__
response = self.process_response(request, response)
File "C:\Users\Ethan\anaconda3\lib\site-packages\django\middleware\clickjacking.py", line 26, in process_response
if response.get('X-Frame-Options') is not None:
Exception Type: AttributeError at /
Exception Value: 'Home' object has no attribute 'get'
Upvotes: 0
Views: 911
Reputation: 1707
You have a typo. In urls.py
, you are setting path('', views.Home)
. views.Home
is the model which is imported inside views.py
, not the function. Your function has a lowercase h.
urls.py
from django.urls import path
from . import views
app_name = 'polls'
urlpatterns = [
path('fruits/', views.index),
path('', views.home), # Not Home
]
Upvotes: 3