Tạo sitemap trong django framework

Ngày 02 tháng 11 năm 2017 | 296 views

Tạo sitemap trong django framework

Sitemap là file xml trong website, giúp cho các công cụ tìm kiếm như google search, bing, yahoo search…tìm hiểu về cấu trúc và lập chỉ mục tìm kiếm trong website của bạn. Khái niệm về sitemap thì các bạn có thể xem tại đây

Django sitemap framework giúp chúng ta tự động tạo file xml trong website của mình một cách dễ dàng.

Để tạo ra sitemap chứ các URL động và URL tĩnh chúng ta thực hiện như sau:

Cấu hình và khỏi tạo

Cấu hình sitemap trong tham số INSTALLED_APPS của file settings.py

INSTALLED_APPS = (
    ...
    'django.contrib.sitemaps',
    ...
)

 

Sau đó chúng ta mở file URLConfig và định nghĩa URL cho sitemap

from django.contrib.sitemaps.views import sitemap

urlpatterns = [
                  ...
                  url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
                  url(r'^admin/', include(admin.site.urls)),
                  ...
              ]

Tạo sitemap cho URL động

Giả sử website của bạn có nhiều bài viết, và muốn dụng sitemap cho tất các các bài viết đó. Thì đầu tiên tạo file sitemaps.py trong ứng dụng của bạn, trong sitemaps.py chúng ta tạo một lớp PageSitemap như sau

from django.contrib.sitemaps import Sitemap

from demo.models import Page

class DemmoSitemap(Sitemap):
    changefreq = "weekly"
    priority = 0.5

    def items(self):
        return Page.objects.filter(status='P')

    def lastmod(self, obj):
        return obj.created_date

Ở đây Object Page là đối tượng bạn muốn lập sitemap, changefreq priority là thuộc tính của lớp, item lastmod là 2 method của lớp để hiểu ý nghĩa của các thuộc tính và lớp này có ý nghĩa như nào trong sitemap các bạn có thể đọc tại sitemaps.org

Method item() sẽ trả về các page được lập sitemap, các bạn chú ý ở ví dụ này mình trả về item là các page hoàn toàn các bạn có thể trả về các item khác nhau như là Products…vv

Method lastmod() trả về ngày sửa cuối cùng của page

Trong Object Page của model chúng ta phải định nghĩa thêm method get_absolute_url(), method này được gọi mặc định bởi method location() của Sitemap class

Nếu các bạn chỉ cần tạo sitemap cho URL động thì chúng ta sẽ thực hiện cấu hình lại file URLConf

Tạo sitemap cho URL tĩnh

Trong trường hợp các URL tĩnh tức là các URL không xuất phát từ các Model trong django, giả sử chúng ta cần lập sitemap cho các URL trong file URLconf. Chúng ta thực hiện như sau.

Chúng ta tạo lớp StaticSitemap trong file staticmaps.py

# sitemaps.py
from django.contrib import sitemaps
from django.urls import reverse

class StaticViewSitemap(sitemaps.Sitemap):
    priority = 0.5
    changefreq = 'weekly'

    def items(self):
        return ['home', 'about']

    def location(self, item):
        return reverse(item)

Trong lớp này chúng ta định nghĩa method location(), nó trả về URL tĩnh cho đối tượng được trả về bới phương thức items()

 

Sử dụng sitemap class và tạo sitemap.xml

Sau khi tạo các class cho các URL động hoặc tĩnh, chúng ta thực hiện cấu hình lại file URLConf để trỏ đến các class này

from django.contrib.sitemaps.views import sitemap
from demo.sitemaps import *
sitemaps = {
    'pages': PageSitemap,
    'static': StaticSitemap,
}

urlpatterns = [
                  ...
                  url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
                  ...
              ]

 

Pinging Google

Giải sử các bạn sử dụng google search consle, vậy để google tự động cập nhật lại chỉ mục cho website của các bạn thì django cung cấp module ping_google()

Method này chúng ta gọi khi save dữ liệu trong model

from django.contrib.sitemaps import ping_google

class Page(models.Model):
    # ...
    def save(self, force_insert=False, force_update=False):
        super(Page, self).save(force_insert, force_update)
        try:
            ping_google()
        except Exception:
            # Bare 'except' because we could get a variety
            # of HTTP-related exceptions.
            pass

Phương thức này sẽ được gọi khi chúng ta thay đổi object page

Vậy là chúng ta đã tạo xong sitemap.xml cho website, để xem kết quả trên localhost thì các bạn vào link http://127.0.0.1:8000/sitemap.xml nếu trên website đã publish domain/sitemap.xml

Tạo lại bảng trong Django

Ngày 04 tháng 1 năm 2018

04-01-2018
175
Cài đặt Centos 7&VMware làm VPS ảo

Ngày 18 tháng 11 năm 2017

18-11-2017
236
Giới thiệu Framework Django

Ngày 22 tháng 7 năm 2017

22-07-2017
371