I followed this article to try to load images from an external website. I am trying to pull all the images from an external link. I have used BeautifulSoup to parse the link and get all the required links.
Before the view calls the render() function at the end of the code, image_list and return_dict have the desired values. However the render function seems to be generating the AttributeError exception. Please assist.
I get the following error:
AttributeError at /post/add_new/
META
Request Method: POST
Request URL: http://localhost:8000/post/add_new/
Django Version: 1.4.1
Exception Type: AttributeError
Exception Value:
META
Exception Location: C:\Python27\lib\urllib2.py in __getattr__, line 225
Python Executable: C:\Python27\python.exe
Python Version: 2.7.3
Python Path:
['C:\\Users\\Talal\\Python Workspace\\talal_ynd',
'C:\\Python27\\lib\\site-packages\\ipython-0.13-py2.7.egg',
'C:\\Python27\\lib\\site-packages\\pyreadline-2.0_dev1-py2.7-win32.egg',
'C:\\Python27\\lib\\site-packages\\pil-1.1.7-py2.7-win32.egg',
'C:\\Python27\\lib\\site-packages\\setuptools-0.6c11-py2.7.egg',
'C:\\windows\\system32\\python27.zip',
'C:\\Python27\\DLLs',
'C:\\Python27\\lib',
'C:\\Python27\\lib\\plat-win',
'C:\\Python27\\lib\\lib-tk',
'C:\\Python27',
'C:\\Python27\\lib\\site-packages']
Server time: Thu, 13 Sep 2012 17:30:45 +0500
Here is my view file:
# Create your views here.
from django.shortcuts import render
from django.http import HttpResponseRedirect
from posts.models import Post, PostForm
from django.template.loader import get_template
from talal_ynd.settings import TEMPLATE_DIRS
def post_view(request):
if request.method == 'POST':
post_form = PostForm(request.POST)
if post_form.is_valid():
success_message = 'Thank you.'
link = post_form.cleaned_data['link']
if 'get_link' in request.POST:
import urllib2
request = urllib2.Request(link)
response = urllib2.urlopen(request)
html=response.read()
from BeautifulSoup import BeautifulSoup
soup=BeautifulSoup(html)
import re
title=''; description=''
description=soup.findAll('meta',
attrs={'name':re.compile("description$",
re.I)})[0].get('content')
try:
title=soup.findAll('meta',
attrs={'name':re.compile("^title$",re.I)})[0].get('content')
except:
pass
if not title:
title=soup.title.string
max_images=10
image_tags=soup.findAll('img',limit=max_images)
image_urls_list=[]
image_urls_list2=[]
from urlparse import urljoin
for image_tag in image_tags:
url=image_tag.get('src')
#image_urls_list.append(request.build_absolute_uri(url))#urljoin(link,url))#HttpRequest.build_absolute_uri(url))
#image_urls_list.append(request.urljoin(link,url))
image_urls_list.append(url)
image_list=[]
for url in image_urls_list:
image_list.append({'url':url})
return_dict={'title':title, 'description':description}
return_dict.update({'images':image_list})
else:
post_form = PostForm()
else:
post_form = PostForm()
return render(request, 'posts/post_form.html', locals())
You've overwritten the request
variable inside your function, because you reused it for the call to urllib2.Request
. Use a different variable name there.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With