Webアプリケーション開発

Django で動的に生成される sitemap.xml を作成する方法

サイトマップとは、検索エンジンがあなたのウェブサイトをクロールするためにインテリジェントに読み取る、あなたのウェブサイト上のXMLファイルのことです。Django を使っている場合、 sites と sitemap フレームワークを使って Django サイトマップを自動的に作成します。

このチュートリアルでは、アプリ名を “blog” とする Django アプリケーションで、ウェブサイトが Home, contact-us, about-us ページを持っていると仮定しています。

contact-us, about ページは静的なページで、静的な URL でテンプレートを提供します。各ブログ記事のURLは、モデル/テーブルBlogのパーマリンクカラムで決定されます

Step 1: Install the Django sites app

プロジェクトの settings.py ファイルを編集して、 django.contrib.sitemaps を INSTALLED_APPS リストに追加します。

env > myproject > myproject > settings.py

SITE_ID = 1   #define the site id

INSTALLED_APPS = [
    'main.apps.MainConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',    #add sites to installed apps
]

sitesアプリをインストールします。そして、設定でSITE_IDを定義します。sitesフレームワークは、サイトマップのサイト名を定義するために使用されます。

Step 2: Run migrations

python3 manage.py migrate

Step 3: Install the Django sitemap app

Django サイトマップアプリをインストールするには、 INSTALLED_APPS に ‘django.contrib.sitemaps’ を追加してください

env > myproject > myproject > settings.py

SITE_ID = 1   #define the site id

INSTALLED_APPS = [
    'blog',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites', #add sites to installed apps
    'django.contrib.sitemaps', #add sitemaps to installed apps
]

Step 4: Create sitemaps.py

Django サイトマップの作成は Django のモデルの作成と似ています。これは models.py と views.py があるフォルダです。アプリのディレクトリに sitemaps.py というファイルを作成します。sitemaps.pyに以下の行を追加してください。

env > myproject > blog > sitemaps.py

from django.contrib.sitemaps import Sitemap
from django.urls import reverse
from .models import *

class Static_Sitemap(Sitemap):

    priority = 1.0
    changefreq = 'yearly'

    def items(self):
        return ['homepage','contactus','aboutus']

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

class Blog_Sitemap(Sitemap):
    changefreq = "weekly"
    priority = 0.8

    def items(self):
        return Blog.objects.filter(active=True).order_by('-id')

    def location(self, obj):
        return f"/{obj.permalink}"

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

静的なURLを生成するクラスと、テーブルから動的なURLを生成するクラスの2つを用意しました。静的な URL は、対応するビュー関数を追加することで、いくつでも追加することができます。

changefreqは,ページのコンテンツが変更される頻度です.値は次のようになります。

  • 'always'
  • 'hourly'
  • 'daily'
  • 'weekly'
  • 'monthly'
  • 'yearly'
  • 'never'

priorityは、サイト内の他のページに対するページの重要度を表します。0.0から1.0までの値を設定することができます。

Step 4: Update urls.py

env > myproject > blog > url.py

from django.urls import path
from . import views
from django.contrib.sitemaps.views import sitemap
from .sitemaps import ArticleSitemap

sitemaps = {
    'blog':Blog_Sitemap
    'static': Static_Sitemap(),
}

urlpatterns = [
    path("", views.homepage, name="homepage"),
    path("contact", views.contactus, name="contact"),
    path("about", views.aboutus, name="about"),
    path('sitemap.xml', sitemap, {'sitemaps':sitemaps},name='django.contrib.sitemaps.views.sitemap'),
]

すべて完了しました。これで、サイトマップファイルがURL http://127.0.0.1:8000/sitemap.xml で利用できるようになります。

この記事を書いた人

その他記事はこちら

パンディサンジョク

SE

ネパールから来ました。よろしくお願いします。

その他記事はこちら

関連記事