Django random post not showing on base.html
I'm trying to get ads to show on the sidebar of my website (in base.html). However the ad isn't displaying.
The code I'm using is:
views.py
from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import *
import random
def base(request):
allSideAds=SideBarAd.objects.all()
random_sideAd = random.choice(allSideAds) if allSideAds else None
return render(request, 'base.html', {'random_sideAd': random_sideAd})
models.py
from django.contrib import admin
from django.db import models
from django.urls import reverse
class SideBarAd(models.Model):
AdImage = models.ImageField(help_text='Enter Image Here')
AdLink = models.URLField()
MaxAdViews = models.PositiveBigIntegerField()
AdViews = models.PositiveBigIntegerField()
Approved = models.BooleanField()
def get_absolute_url(self):
return self.AdImage
base.html
{% if random_sideAd %}
<a href="{{ random_sideAd.AdLink }}">
<img src="{{ random_sideAd.AdImage.url }}" alt="Ad Image">
</a>
{% endif %}
When I load a page, the ad that's in my database isn't shown through base.html.
try to print the allSideAds to make sure it exist, if you are sure you have imported the SideBarAd and there is objects, try
allSideAds= list(SideBarAd.objects.all())
random_sideAd = random.choice(allSideAds)
I was able to figure out why this wasn't working. Instead of running this through views.py, I decided to use context_processors.py.
context_processors.py:
import random
from .models import SideBarAd
def sidebar_ad(request):
sidebar_ads = SideBarAd.objects.filter(Approved=True)
sidebar_ad_data = random.choice(sidebar_ads) if sidebar_ads else None
return {'sidebar_ad': sidebar_ad_data}