如何使用django

时间:2017-08-19 05:18:18

标签: html django facebook

我有一个博客网站,我有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评论,我只能对每个帖子使用相同的评论。非常感谢大家。

1 个答案:

答案 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 %}