我有一个博客网站,我有7个应用程序,我用django admin发布。每个应用程序都有最简单的视图(调用,过滤对象并返回模板的视图)和post_detail视图,它打开另一个模板,其中只显示一个帖子的信息。我的帖子中没有slug,我很抱歉,因为我对这是什么有一点想法,但我认为我有独特的网址,因为帖子网址是由正则表达式自动调用的。所以,我试图把facebook评论插件放在我的网站上,但是当我把facebook评论时,我不能用相应的帖子列出评论。对不起,我不知道这样做的正确方法是什么。我想知道如何用我的帖子列出Facebook评论。非常感谢,代码如下:
views.py:
def index(request):
posts = Evento.objects.filter(published_date__lte=timezone.now()).order_by('-published_date')
return render(request, 'core/index.html', {'posts': posts})
def post_detail(request, pk):
post = get_object_or_404(Evento, pk=pk)
Evento.objects.get(pk=pk)
return render(request, 'core/post_detail.html', {'post': post})
models.py:
class Evento(models.Model):
nome = models.CharField(max_length=200, null=False, blank=False)
apresentacao = models.TextField(null=False, blank=False)
foto = CloudinaryField('foto', null=True, blank=True)
created_date = models.DateTimeField(
default=timezone.now)
published_date = models.DateTimeField(
blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.nome
index.html
{% for post in posts %}
<div class=item>
<p><h1><a href="{% url 'core:detalhe' pk=post.pk %}">{{ post.nome }}</a></h1></p>
<center><img>{% cloudinary post.foto %}</img></center>
<p><h2>{{ post.apresentacao }}</h2></p>
<br>
</div>
{% endfor %}
post_detail.html:
from django.shortcuts import render
from django.utils import timezone
from .models import Evento
from django.shortcuts import render, get_object_or_404
def index(request):
posts = Evento.objects.filter(published_date__lte=timezone.now()).order_by('-published_date')
return render(request, 'core/index.html', {'posts': posts})
def post_detail(request, pk):
post = get_object_or_404(Evento, pk=pk)
Evento.objects.get(pk=pk)
return render(request, 'core/post_detail.html', {'post': post})
我不知道如何为每个新帖子创建新的Facebook评论,我只能对每个帖子使用相同的评论。非常感谢大家。
答案 0 :(得分:0)
将此脚本放在打开的<body>
标记之后。
<body>
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/id_ID/sdk.js#xfbml=1&version=v2.10";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
.....
然后,在core/post_detail.html
或{% for
循环内,使用您的详细信息发布网址更改data-href=""
。
<div class="fb-comments" data-href="http://{{ request.META.HTTP_HOST }}{% url 'core:detalhe' pk=post.pk %}" data-numposts="5"></div>
为了提高效率,您可以使用request.get_full_path
,但request.get_full_path
允许来自GET
参数的查询字符串。
<div class="fb-comments" data-href="{{ request.get_full_path }}" data-numposts="5"></div>
有关详细信息,请参阅docs。
循环内的示例:
{% for post in posts %}
<div class="item">
<h1>{{ post.nome }}</h1>
<div class="fb-comments" data-numposts="5"
data-href="http://{{ request.META.HTTP_HOST }}{% url 'core:detalhe' pk=post.pk %}">
</div>
....
</div>
{% endfor %}
core/post_detail.html
内的示例:
{% extends "base.html" %}
{% block title %}{{ post.nome }} - {{ block.super }}{% endblock %}
{% block content %}
<div class="detail-post">
<h1>{{ post.nome }}</h1>
<div class="fb-comments" data-numposts="5"
data-href="http://{{ request.META.HTTP_HOST }}{% url 'core:detalhe' pk=post.pk %}">
</div>
</div>
{% endblock %}