在我的帖子模型中,我有缩略图和图像字段。当我做post.thumbnail或post.image时,图像会显示出来。但是当我检查我的管理员时,没有保存图像或缩略图。这很奇怪,因为我记得在我编写更多代码之前已经保存了。我改变了一些东西,他们也没有得到保存......反正我没有打扰,因为当我做post.image时图像仍然显示。
现在我正试图让用户能够在我的网站上分享任何帖子。 但这是问题所在。
如果我这样做
<meta property="og:image" content="{{post.thumbnail}}" />
然后,即使我发布图像并且该图像以post.image
显示,也会显示一些默认图像(当我没有发布任何图像时,我就会显示默认图像)。
这是我的模板代码:
{% if post.main_image %}
<img src="{{post.get_image_url}}" class="img-rounded" alt="☺" height="75" width="75"/>
{{post.get_image_url }}
{% elif post.video %}
{% video post.video as my_video %}
<img src="{{ my_video.thumbnail }}" class="img-rounded" alt="☺" height="75" width="75"/>{% endvideo %}
{% elif post.url %}
<img src="{{post.image}}" class="img-rounded" alt="☺ EBAGU" height="75" width="75"/>
{% else %}
<img src="{{post.thumbnail}}" class="img-rounded" alt="☺" height="75" width="75"/>
{% endif %}
我的问题是:我被允许做什么
{{post.image}} == {{post.thumbnail}} == {{ my_video.thumbnail }}=={{post.forsharingimage}}
然后像这样使用它:
<meta property="og:image" content="{{post.forsharingimage}}" />
简而言之:设置{{post.something}} == {{post.somethingelse}}
,然后使用{{post.somethingelse}}
作为变量。这有效吗?
这就是我的图片保存方式:
def extract(url):
g = Goose()
try:
article = g.extract(url=url)
if article.top_image is None:
return random.choice(myList)
else:
if article.top_image.src is None:
return random.choice(myList)
else:
resposne = {'image':article.top_image.src}
return article.top_image.src
except ParseError:
if can_handle():
handle_exception()
else:
print("couldn't handle exception: url={0}".format(url))
raise
class PostCreateView(CreateView):
def form_valid(self, form):
self.object = form.save(commit=False)
# any manual settings go here
self.object.moderator = MyProfile.objects.get(user=self.request.user)
self.object.image = extract(self.object.url)
self.object.thumbnail = extractt(self.object.content)
self.object.save()
return HttpResponseRedirect(reverse('post', args=[self.object.slug]))
编辑:这就是我所做的,但它不起作用......
<meta property="og:site_name" content="ebagu.net"/>
<meta property="og:title" content="{{post.title}}"/>
<meta property="og:description" content="{{post.content|safe}}" />
<meta property="article:author" content="ebagu" />
<meta property="og:url" content="{{request.build_absolute_uri}}" />
<meta property="og:image" content="{{post.thumbnail}}" />
{% if post.main_image %}
<meta property="og:image" content="{{post.get_image_url}}" />
{% elif post.video %}
{% video post.video as my_video %}
<meta property="og:image" content="{{ my_video.thumbnail }}" />
{% endvideo %}
{% elif post.url %}
<meta property="og:image" content=="{{post.image}}" />
{% else %}
<meta property="og:image" content=="{{post.thumbnail}}" />
{% endif %}
答案 0 :(得分:1)
我不确定你的问题究竟是什么,因为可能有几个问题。首先,要发布到社交网络,元标记(在您的情况下为OpenGraph og:image
)必须包含绝对URL,这不是Django使用的。 Django总是使用相对URL(即使调用mymodel.get_absolute_url()
)。
您正在做的另一件事是试图找出您的图像是否存在。我根本不理解您的部分问题,所以我专注于元标记问题:
您需要将绝对网址添加为og:image
值:
通过调用request.build_absolute_uri(path)
在Django中返回绝对URL。
您可以使用如下的模板标签在模板中实现这一目标:
# Change to simple_tag as of Django 1.9
@register.assignment_tag(takes_context=True)
def get_absolute_url(context, relurl):
if not relurl:
return None
request = context['request']
return request.build_absolute_uri(relurl)
在模板中:
{% load absoluteurl %}
{% if post.main_image %}
{% get_absolute_url post.main_image.url as image_url %}
{% endif %}
<meta property="og:image" content="{{ image_url }}" />
回答这个问题:
是的,我被允许做
{{post.image}} == {{post.thumbnail}} == {{ my_video.thumbnail }}=={{post.forsharingimage}}
不,你不能在模板中与两个以上的方面进行比较(最好是以最小的方式为自己尝试虚拟数据)。
因为:==
是与布尔结果的比较。
但我认为你真的想做一项任务:=
更不可能有两个以上的方面。
回答这个问题:
设置{{post.something}} == {{post.somethingelse}}然后使用{{post.somethingelse}}作为变量。这有效吗?
否则您无法将比较结果中的布尔值指定为模板中的变量。您必须在视图中执行此操作并将其添加到上下文中。这不起作用:
{% with 'bla' == 'bla' as test %}
===={% if 'bla' == test %} {{ test }} {% endif %}====
{% endwith %}
抛出:
TemplateSyntaxError
Exception Value: 'with' expected at least one variable assignment
如果您不想进行比较,但仅指定您可以这样做:
{% with 'bla' as test %}
===={% if 'bla' == test %} {{ test }} {% endif %}====
{% endwith %}
如果您想以相同的方式使用不同的变量(在您的情况下是图像),您应该在if-elif-else-block中进行赋值,然后在以下模板代码中使用新变量:
{% if large_image %}
{% get_absolute_url large_image.image.url as image_url %}
{% elif small_image %}
{% get_absolute_url small_image.image.url as image_url %}
{% endif %}
Do something with {{ image_url }}
答案 1 :(得分:0)
您似乎想要为模板中的变量赋值。
您可以使用with
标记来实现它:
{% with myvar=post.something.special_var %}
This is {{ myvar }}
{% endwith %}
了解有关标记@ django-docs
的更多信息