Read and display JSON results from Google Books API
Split search() up into two functions, each accepting only one method, and dispose of your if.
There's a little bit of religion around this, but HTML5 accepts both &quot;naive HTML&quot; and XHTML-compatible tag closure, so this:
&lt;input type=&quot;text&quot; name=&quot;search&quot;&gt;

is also accepted as
&lt;input type=&quot;text&quot; name=&quot;search&quot; /&gt;

and the latter is (1) more explicit on where the tag ends and (2) is more broadly compatible.
This:
request.form.get(&quot;search&quot;).upper()

does not benefit from get, because you don't provide a default. Either allow the crash on a missing parameter, i.e. request.form['search'], or provide a default to get, likely the empty string.
This:
search = lookup(search)

is ill-advised, because it swaps types on the same symbol. The input is a string and the output is a dictionary.
This:
url = f'https://www.googleapis.com/books/v1/volumes?q={search}&amp;key=MYAPIKEY'
    

first should not hard-code your API key directly into the string, and second should not format any query parameters into the string. Instead, pass params={...} into get().
This:
except requests.RequestException:
    return None

is fairly catastrophic for the application's ability to tell maintainers and users what went wrong. You're going to want to log the exception, and translate it into an appropriate failure message returned to your own caller.
This:
requests.get(url)

should use the response in a with.
Your search.html template is deeply bizarre. Where I would expect to see a for, you've only shown the first and third items?
Ensure that you're telling the browser that your content is in Spanish.
This:
action='/lookup'

needs to use double quotes.