Python 如何使用django将类似的帖子添加到详细信息页面
我试着在旁边的专栏中展示与一篇文章类似的帖子。一些像youtube这样的网站甚至出现了堆栈溢出。由于没有人询问,我假设旁边列出的文章都是带有类似标签的文章。但它不起作用,它说什么都不匹配。这是我在post_detail.html中的内容:Python 如何使用django将类似的帖子添加到详细信息页面,python,django,Python,Django,我试着在旁边的专栏中展示与一篇文章类似的帖子。一些像youtube这样的网站甚至出现了堆栈溢出。由于没有人询问,我假设旁边列出的文章都是带有类似标签的文章。但它不起作用,它说什么都不匹配。这是我在post_detail.html中的内容: {% block content %} <div class="row" style="margin-top: 70px"> <div class="col-sm-8"> {% if instance.ima
{% block content %}
<div class="row" style="margin-top: 70px">
<div class="col-sm-8">
{% if instance.image %}
<img src='{{ instance.image.url }}' class="img-responsive" />
{% endif %}
<p>Share on:
<a href="https://www.facebook.com/sharer/sharer.php?u={{ request.build_absolute_uri }}">
Facebook
</a>
<a href="https://twitter.com/home?status={{ instance.content | truncatechars:80 | urlify }}%20{{ request.build_absolute_uri }}">
Twitter
</a>
<a href='https://plus.google.com/share?url={{ request.build_absolute_uri }}'></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url={{ request.build_absolute_uri }}&title={{
instance.title }}&summary={{ share_string }}&source={{ request.build_absolute_uri }}">
Linkedin
</a>
</p>
<h1>{{ title }}<small>{% if instance.draft %}<span style="color:red"> Draft</span>{% endif %} {{instance.publish}}</small></h1>
{% if instance.user.get_full_name %}
<p>By {{ instance.user.get_full_name }}</p>
{% else %}
<p>Author {{ instance.user }}</p>
{% endif %}
<p><a href='{% url "posts:list" %}'>Back</a></p>
<p><a href='{% url "posts:delete" instance.id %}'>delete</a></p>
<p>{{instance.content | linebreaks }}</p>
<hr>
</div>
<div class="panel panel-default pull-right" style="height: 1000px">
<div class="panel-heading">
<h3 class="panel-title">Similar Articles</h3>
</div>
==========right here====================
<div class="panel-body">
{% for tag in instance.tags.all %}
<h4> <a href="{% url 'posts:detail' slug=tag.slug %}"> {{ tag.title }}</a> </h4><hr>
{% endfor %}
</div>
==========right here====================
</div>
</div>
{% endblock content %}
如果此方法超出语法更正范围,需要重写。我不介意用正确的方式写。这是我在Django工作的第二个月。对我来说,这种方式是有道理的,但它不起作用。像youtube这样的网站在主视频的右边有一个视频和类似的视频,这些视频在那里是因为它们共享类似的标签吗?欢迎提供任何帮助。您应该让我们知道哪些不匹配 您的
post\u detail
尝试查找带有标签slug的帖子
instance=get\u object\u或\u 404(Post,slug=slug)
我怀疑那是你的本意
get\u object\u或_404
尝试查找精确匹配或引发错误。由于您的原始帖子有标签,您将获得相同的帖子或多个帖子 下面的代码块也不是您所希望的
{% for tag in instance.tags.all %}
<h4> <a href="{% url 'posts:detail' slug=tag.slug %}"> {{ tag.title }}</a> </h4><hr>
{% endfor %}
这些视频存在是因为它们共享相似的标签吗
不确定他们是如何判断相关性的,你应该在另一个问题中提问。如果我不得不猜测的话,这将不仅仅是标签比较 **编辑 实际上,
相关性的恰当术语是相似性
您可以通过谷歌搜索文档相似性
找到更多信息
{% for post in instance.get_related_post_by_tag %}
// href to post.absolute_url
{% endfor %}
从长远来看,不使用已经尝试和测试过的可重用Django应用程序重新发明轮子是明智的做法。在您的情况下,有这样的应用程序:
并且易于使用:
你安装它
pip install django-taggit
将其添加到已安装的应用程序:
INSTALLED_APPS = [
...
'taggit',
]
将其自定义管理器添加到要添加标记的模型中
from django.db import models
from taggit.managers import TaggableManager
class YourModel(models.Model):
# ... fields here
tags = TaggableManager()
您可以在视图中使用它:
all_tabs = instance.tags.all()
它甚至有一种方法:
返回标记类似的其他对象的列表(不是惰性查询集)
对于这一个,先订购最相似的
编辑
要检索类似的帖子,您应该使用:
similar_posts = instance.tags.similar_objects()
如果只获得第一个,比方说,5个类似的帖子:
similar_posts = instance.tags.similar_objects()[:5]
其中instance
是Post
模型的一个实例。这是我词汇表中的一个新词,也是我一直在寻找的术语。我如何表现出关联性。我不知道他们的关系是如何建立在什么网站上的。我认为它是基于标签的。你的方式看起来不错,但是我如何链接到Post.objects.filter(tags\uu in=self.tags.all())返回的帖子?谢谢你的回复。但是我如何链接到类似的帖子呢?我将最终切换到taggit,因为在尝试使用它之前,有人建议我使用它,它破坏了我的应用程序。我一开始就得用它。我现在只使用Django大约两个月了。我在学习一个教程,所以我在模仿他是怎么做的。我试着把它弄乱了一个小时。但是谢谢
similar_posts = instance.tags.similar_objects()
similar_posts = instance.tags.similar_objects()[:5]