サイトマップとは、検索エンジンがあなたのウェブサイトをクロールするためにインテリジェントに読み取る、あなたのウェブサイト上のXMLファイルのことです。Django を使っている場合、 sites と sitemap フレームワークを使って Django サイトマップを自動的に作成します。
このチュートリアルでは、アプリ名を “blog” とする Django アプリケーションで、ウェブサイトが Home, contact-us, about-us ページを持っていると仮定しています。
contact-us, about ページは静的なページで、静的な URL でテンプレートを提供します。各ブログ記事のURLは、モデル/テーブルBlogのパーマリンクカラムで決定されます
プロジェクトの 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フレームワークは、サイトマップのサイト名を定義するために使用されます。
python3 manage.py migrate
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
]
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までの値を設定することができます。
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 で利用できるようになります。
関連記事