in IT programming python ~ read.

Adding django-disqus to a wagtail site

I wanted to add a Disqus discussion for our blog on efektivni-altruismus.cz and it wasn't that straightforward as I thought.

I decided to use django-disqus plugin. I installed it according to documentation, which is easy (download, add django-disqus and django.contrib.sites to INSTALLED_APPS, add API_KEY obtained from Disqus and short name).

After putting it to production everything worked great. But a day later newly created users couldn't log in. They just got Error 500. I found out in logs that it has something to do with Sites framework - that the requested site object doesn't exists.

The problem is because of the fact that wagtail uses different Sites framework than official django's which is needed for django-disqus.

Hence, I had to basically duplicate our existing sites from wagtail sites modules to Django's. This is of course workaround and not a proper solution...

In python manage.py shell:

>>> from django.contrib.sites.models import Site as djangoSite
>>> from django.apps import apps
>>> Site = apps.get_model('wagtailcore.Site')
>>> Site.objects.all()
<QuerySet [<Site: Oficiální stránky Spolku pro efektivní altruismus [default]>, <Site: Summer School AI>]>  
>>> [(x.id, x.hostname) for x in Site.objects.all()]
[(2, 'efektivni-altruismus.cz'), (4, 'test.efektivni-altruismus.cz')]
>>> djangoSite.objects.create(pk=2, hostname='efektivni-altruismus.cz')
>>> djangoSite.objects.create(pk=4, hostname='test.efektivni-altruismus.cz')

And that's it!