osa1 github gitlab twitter cv rss

Django ile Wordpress'e bağlanmak

August 28, 2010 - Tagged as: python, django, tr.

Birkaç gün önce bir arkadaş sormuştu Django ile Wordpress’e nasıl bağlandığımı(bkz arşiv sayfam. Yaptığım şey, wordpress için bir model oluşturup, mümkün olduğunca wordpress veritabanını kopyaladım.

Kendi sitem için sadece wp_posts tablosunu aktardım, fakat tüm wordpress’de aktarılabilir biraz daha uğraşılarak. Bu yöntemle wordpress’e yazı bile girebilirsiniz aslında. Ben sadece yazıları çekiyorum.

wp_posts tablosu(wordpress 2.9.1 için) şu alanları içeriyor:

field           type
----------------------------
id              int(11)
post_date       datetime
post_title      varchar(100)
post_content    longtext
post_excerpt    varchar(100)
post_status     varchar(100)
guid            varchar(100)
comment_count   int(11)
post_type       varchar(20)

Bunu Django ORM’ine şu şekilde çevirdim(tam olarak aynısı olmasa da, eğer sadece yazıları okuyacaksanız gayet güzel çalışıyor, yazı eklemek için denemedim):

# models.py
from django.db import models
class Posts(models.Model):
    post_date = models.DateTimeField()
    post_content = models.TextField()
    post_title = models.CharField(max_length=100)
    post_content = models.TextField()
    post_excerpt = models.CharField(max_length=100)
    post_status = models.CharField(max_length=20)
    guid = models.CharField(max_length=100)
    comment_count = models.IntegerField()
    post_type = models.CharField(max_length=20)

Daha sonra views.py dosyamdan şu şekilde çekiyorum:

from wp.models import Posts
def wp():
    return [post for post in Posts.objects.order_by("-post_date") if post.post_type == "post" and post.post_status == "publish"]

Bundan sonrası normal Django işlemleri. wp() fonksiyonunu istediğim sayfaya gönderdikten sonra(render_to_response ile mesela) aşağıdaki template kodları ile wordpress yazılarıma ait verileri çekiyorum:

{% for yazi in wp %}
        {{ yazi.post_title }} *baslik*
        {{ yazi.post_date }} *tarih*
        {{ yazi.post_content }} *icerik*
        {{ yazi.coment_count }} *yorum sayisi*
{% endfor %}

Tabii bunları çekerken bazı builtin template taglardan yararlanıyorum. Bu arada, Django, 1.2 sürümüyle beraber artık birden fazla veritabanına bağlanabiliyor, wordpress yazılarınızı çekmek istiyorsanız bunu kullanabilirsiniz(ben aynı veritabanını kullanıyorum.