Home > OS >  Variable 'html' referenced before assigned: UnboundLocalError
Variable 'html' referenced before assigned: UnboundLocalError

Time:04-04

This code previously worked and outputed what I wanted on the website, but then this error happened

from django.shortcuts import render
import json

def get_html_content(fplid):
    import requests
    API_KEY = "eb9f22abb3158b83c5b1b7f03c325c65"
    url = 'https://fantasy.premierleague.com/api/entry/{fplid}/event/30/picks/'

    payload = {'api_key': API_KEY, 'url': url}
    for _ in range(3):
        try:
            response = requests.get('http://api.scraperapi.com/', params= payload)
            if response.status_code in [200, 404]:
                break
        except requests.exceptions.ConnectionError:
            response = ''
    #userdata = json.loads(response.text)
    return response.text

def home(request):
    if 'fplid' in request.GET:
        fplid = request.GET.get('fplid')
        html = get_html_content(fplid)
    return render(request, 'scrape/home.html', {'fpldata': html})

here is my views.py file. I think I assigned html before, but I'm not sure, how is it referenced before it renders. I added scraperapi for many ip addresses, as I thought maybe I was banned from the api. I am unsure what is going on.

<body>
    <h1>Enter Your FPL id </h1>
    <form method="GET">
        <label for="fplid"> </label>
        <input type="text", name="fplid", id="fplid"> <br>
        <input type="submit" value="Submit" />
    </form>

    <h3> {{fpldata}}</h3>
</body>

This is a part of the home.html file if it is relevant

CodePudding user response:

When you initially load the page there probably wont'be an initialized ?fplid=xx. When this isn't present the variable is not assigned a value.

You could initialize the variable with html = None or this:

def home(request):
    if 'fplid' in request.GET: # <- when this isnt true
        fplid = request.GET.get('fplid')
        html = get_html_content(fplid)
        return render(request, 'scrape/home.html', {'fpldata': html})
    return render(request, 'scrape/home.html')
  • Related