尝试显示从用户发布的链接中提取的图像 [英] trying to display the image that got extracted from the user posted link

查看:125
本文介绍了尝试显示从用户发布的链接中提取的图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我正在努力做的。让用户发布url,url被提交并从链接用户发布的主图像提取。显示该图像。我在这个图像被抽出的点,作为用户发布的链接(谢谢你修复错误)现在我只是试图显示图像

  Media.py 
import json import urllib2 from urllib2 import请求从goose import Goose
def get_content(url):
此函数旨在返回内容来自url
:param url:获取内容的URL
:return:来自url
的响应
req = urllib2.Request(url,headers = {'User -Agent':Magic Browser})
response = urllib2.Request.urlopen(req).read()
return response


def extract(url )
url = get_content(url)
g = Goose()
article = g.extract(url = url)
resposne = {'image':article.top_image.src
return json.dumps(resposne)

view.py



class PostCreateView(CreateView):

model = Post
form_class = PostForm
模板_name ='main / add_post.html'

def form_valid(self,form):
self.object = form.save(commit = False)
#任何手动设置这里
self.object.moderator = self.request.user
url = self.request.GET.get('url')
image = extract(url)
self。 object.save()
return HttpResponseRedirect(reverse('post',args = [self.object.slug]))

@method_decorator(login_required)
def dispatch(self ,request,* args,** kwargs):

return super(PostCreateView,self).dispatch(request,* args,** kwargs)

def index )
category = Category.objects.all()

try:
sort = request.GET [sort]。strip()
sort_method = SortMethods [sort]
page = request.GET [page]。strip()
除了KeyError:
sort_method = SortMethods.score
page = 1

如果sort_method == SortMethods.date:
thread_list = Post.objects.order_by( - pub_date)
else:
thread_list = Post.objects.all()
thread_list = sorted(thread_list,key = lambda x:x.get_score(),reverse = True)

paginator = Paginator(thread_list,30)

try:
posts = paginator.page(page)
except PageNotAnInteger:
posts = paginator.page(1)
除了EmptyPage:
posts = paginator.page(paginator.num_pages)

context = {
posts:posts,
pages: paginator.page_range,
sort:sort_method.name,
categories:categories,

}
return render(request,main / index.html ,上下文)


Models.py

class Post(models.Model):
category = models.ForeignKey(Category)
pub_date = models.DateTimeField(auto_now_add = True)
title = models.CharField(max_length = 100)
content = FroalaField()
url = models.URLField(max_length = 250,blank = True,null = True)
moderator = models.ForeignKey(User)
rank_score = models.FloatField(default = 1)

views = models.IntegerField(default = 0)
image = models.ImageField(upload_to = images,blank = True,null = True)
slug = models.CharField(max_length = 100,unique = True)

objects = models.Manager()


forms.py

class PostForm(forms.ModelForm):
title = forms.CharField(max_length = 128,help_text =plz enter)

url = forms.URLField(max_length = 200,
help_text =请输入页面的URL,required = False)
v iews = forms.IntegerField(widget = forms.HiddenInput(),initial = 0)
content = forms.CharField(widget = FroalaEditor)
class Meta:
model = Post

exclude = ['pub_date','moderator','rank_score','image','slug']


解决方案

我没有看到你的models.py文件。所以我会这样做:


  1. 确保你在你类的models.py中有一个列



    img = models.FileField(upload_to ='static / your_directory /',null = True)



    没有null = TrueDjango无法进行迁移。


  2. 提交Django后,将该图像放入上述目录。


  3. 在设置上下文数据后,在模板中渲染图像:



    < img src =/ {{ your_object .img}}> !不要忘记SLASH !!!


这是一个没有AJAX的设置。请阅读下面的评论,了解更多信息,thx。


This is what I'm trying to do. Let user post url, the url is submitted and extract main image from the link user posted. Display that image. I;m at a point the image got extracted as the user posted link(thank you for fixing the error) now I'm simply trying to display the image

Media.py
import json import urllib2 from urllib2 import Request from goose import Goose
def get_content(url):
    """This function is intended to return content from url.
    :param url: URL to get content
    :return: The response from url
    """
    req = urllib2.Request(url, headers={'User-Agent': "Magic Browser"})
    response = urllib2.Request.urlopen(req).read()
    return response 


def extract(url):
    url = get_content(url)
    g = Goose()
    article = g.extract(url=url)
    resposne = {'image':article.top_image.src}
    return json.dumps(resposne)

views.py



    class PostCreateView(CreateView):

         model = Post
         form_class = PostForm
         template_name = 'main/add_post.html'

         def form_valid(self, form):
                self.object = form.save(commit=False)
                # any manual settings go here
                self.object.moderator = self.request.user
                url = self.request.GET.get('url')
                image = extract(url)
                self.object.save()
                return HttpResponseRedirect(reverse('post', args=[self.object.slug]))

         @method_decorator(login_required)
         def dispatch(self, request, *args, **kwargs):

                return super(PostCreateView, self).dispatch(request, *args, **kwargs)

def index(request):
        categories = Category.objects.all()

        try:
                sort = request.GET["sort"].strip()
                sort_method = SortMethods[sort]
                page = request.GET["page"].strip()
        except KeyError:
                sort_method = SortMethods.score
                page = 1

        if sort_method == SortMethods.date:
                thread_list = Post.objects.order_by("-pub_date")
        else:
                thread_list = Post.objects.all()
                thread_list = sorted(thread_list, key=lambda x: x.get_score(), reverse=True)

        paginator = Paginator(thread_list, 30)

        try:
                posts = paginator.page(page)
        except PageNotAnInteger:
                posts = paginator.page(1)
        except EmptyPage:
                posts = paginator.page(paginator.num_pages)

        context = {
                "posts": posts,
                "pages": paginator.page_range,
                "sort": sort_method.name,
                "categories":categories,

        }
        return render(request, "main/index.html", context)


Models.py 

    class Post(models.Model):
        category = models.ForeignKey(Category)
        pub_date = models.DateTimeField(auto_now_add = True)
        title = models.CharField(max_length = 100)
        content = FroalaField()
        url = models.URLField(max_length=250, blank=True, null=True)
        moderator = models.ForeignKey(User)
        rank_score = models.FloatField(default= 1)

        views = models.IntegerField(default=0)
        image = models.ImageField(upload_to="images",blank=True, null=True)
        slug = models.CharField(max_length=100, unique=True)

        objects = models.Manager()   


forms.py

class PostForm(forms.ModelForm):
    title = forms.CharField(max_length=128, help_text="plz enter")

    url = forms.URLField(max_length=200,
                         help_text="Please enter the URL of the page.", required=False)
    views = forms.IntegerField(widget=forms.HiddenInput(), initial=0)
    content = forms.CharField(widget=FroalaEditor)
    class Meta:
        model = Post

        exclude = ['pub_date', 'moderator', 'rank_score', 'image','slug']

解决方案

I don't see your models.py file. So I would do this:

  1. Make sure, that you have in your models.py in your class a "column" e.g.

    img = models.FileField(upload_to='static/your_directory/', null=True)

    Without "null=True" Django cannot make migrations.

  2. After submitting Django will place that image into mentioned directory.

  3. Render image in your template after setting context data:

    <img src="/{{ your_object.img }}"> !!! do NOT forget the SLASH !!!

This is a setup without AJAX. Please read comments below for futher information, thx.

这篇关于尝试显示从用户发布的链接中提取的图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆