Django + disqus + путаница с get_absolute_url

У меня есть приложение для блога django, и я пытаюсь разместить disqus на каждой из моих страниц с одной записью в блоге, но все комментарии отображаются во всех записях. Я просмотрел связанные вопросы и думаю, что моя проблема может быть связана с get_absolute_url.

Итак, изначально у меня была эта модель и набор get_absolute_url:

class posts(models.Model):
    author = models.CharField(max_length = 30)
    title = models.CharField(max_length = 100)
    bodytext = models.TextField()
    timestamp = models.DateTimeField()
    slug = models.SlugField(max_length = 255)
    description = models.TextField()

    def __unicode__(self):
        return self.bodytext

    def get_absolute_url(self):
        return reverse('blog.views.home')

Это просто возвращало '/' в качестве моего get_absolute_url, и когда я пытался добавить аргументы, он просто возвращал пустую строку... поэтому я попытался поэкспериментировать с:

 def get_absolute_url(self):
        return reverse('blog.views.single', args=[self.slug])

и

def get_absolute_url(self):
        return reverse('single', args=[self.slug])

Который в исходном коде Javascript disqus-url имеет что-то вроде «single/secondentry», но комментарии по-прежнему появляются во всех записях.

Поэтому я думаю, что часть проблемы может заключаться в том, что я просто не понимаю, что такое get_absolute_url. Погуглив и прочитав документы, я подумал, что это будет URL-адрес моей домашней страницы ('blog.views.home'), но когда я установил его таким образом, если я добавлю какие-либо аргументы, он просто вернет пустую строку.

Вот мои URL-адреса для домашних и отдельных страниц:

 url(r'^$', 'blog.views.home', name='home'),
    url(r'^$', 'blog.views.index', name='index'),
    url(r'^single/(?P<slug>[\w-]+)/$', 'blog.views.single', name='single'),
    ...

Для непосредственной проблемы здесь элементы Javascript disqus, кажется, назначаются правильно в противном случае, поэтому я не уверен, почему комментарии все еще отображаются во всех записях.

var disqus_shortname = 'sitename';
var disqus_developer = "1";
var disqus_identifier = "1";
var disqus_url = "/single/first/";
var disqus_title = "First post";

person LVNGD    schedule 28.07.2013    source источник
comment
Поскольку у вас есть URL-имя, вы можете использовать его: return reverse('single', args=[self.slug]) . Кроме того, у вас есть пространство имен, указанное для blogs в конфигурации корневого URL-адреса?   -  person karthikr    schedule 28.07.2013
comment
Я попробовал это и получил ту же переменную результата/javascript, но комментарии по-прежнему отображаются во всех записях.   -  person LVNGD    schedule 28.07.2013
comment
Вы можете отредактировать свой вопрос, как вы его используете?   -  person karthikr    schedule 28.07.2013
comment
Конечно, я добавил именованный URL-адрес, но я думаю, что get_absolute_url возвращает то, что я хочу, потому что я вижу это в переменной javascript, я просто не могу понять, почему комментарии disqus все еще появляются для всех записей, а не только для запись они размещены.   -  person LVNGD    schedule 28.07.2013
comment
@karthikr: я думаю, это потому, что он использует именованный аргумент. Таким образом, ему нужно использовать kwargs.   -  person Games Brainiac    schedule 28.07.2013
comment
@user2532814 user2532814 Вы должны перезаписать весь div, так как это вызов ajax.   -  person karthikr    schedule 28.07.2013
comment
@GamesBrainiac Я считаю, что проблема ОП решена. это другой вопрос   -  person karthikr    schedule 28.07.2013


Ответы (1)


Я считаю, что проблема в том, что у вас есть именованный аргумент (?P<slug>[\w-]+). Таким образом, вместо args вам нужно использовать kwargs.

Итак, что-то вроде:

def get_absolute_url(self):
    return reverse('blog.views.single', kwargs={'slug': self.slug})

Я считаю, что это должно решить вашу проблему.

person Games Brainiac    schedule 28.07.2013
comment
Я пробовал это, но все еще получаю все комментарии ко всем записям. Может быть, я что-то еще упускаю? Переменная javascript по-прежнему показывает правильный URL-адрес моего disqus-absolute-url, и я также получаю уникальные идентификаторы disqus для каждой записи. - person LVNGD; 28.07.2013