2

Django サイトマップを実装したいのですが、sitemaps.py ファイルを配置する場所と、どの urls.py ファイルを変更して含める必要があるかについて少し混乱しています。

url(r'^sitemap.xml$', 'django.contrib.sitemaps.views.index', {'sitemaps': sitemaps}),

上記の行を project(mysite) urls.py ファイルまたは app(sampleapp1) urls.py ファイルに入れますか?

4

2 に答える 2

7

プロジェクトのアプリ (サイトマップが必要なもの) 内にサイトマップを作成します。ドキュメントには、何をどこで行うかについては記載されていません。自由に好きなように実行できるため、URL で渡される辞書に登録するだけで済みます。 . たとえば、アプリyour_projectを持つ があります。blog

your_project
  - blog
    - models.py
    - views.py
    - ...
    - sitemap.py

あなたの sitemap.py で:

from django.contrib.sitemaps import Sitemap
from blog.models import Entry

class BlogSitemap(Sitemap):
    changefreq = "never"
    priority = 0.5

    def items(self):
        return Entry.objects.filter(is_draft=False)

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

次に、urls.py (プロジェクトのメインの urls.py) で:

...

from blog.sitemap import BlogSitemap

sitemaps = {
    'blog':BlogSitemap
}


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

必要なすべてのサイトマップに対して同じことを繰り返します。プロジェクトが大きい (多くのアプリ) 場合は、アプリごとに異なるサイトマップを使用するのが賢明です。次に、urls.py で:

...

from blog.sitemap import BlogSitemap
from fooapp.sitemap import FooSitemap
from barapp.sitemap import BarSitemap

sitemaps = {
    'blog':BlogSitemap,
    'foo':FooSitemap,
    'bar':BarSitemap,
}
于 2014-08-10T16:01:35.547 に答える
3

ドキュメントはこれを強調していますが、要約されたバージョンは次のとおりです。

  1. 設定が正しいことを確認してください。これは次の 2 つに要約されます。

    1. 持っdjango.contrib.sitemapsているINSTALLED_APPS
    2. サイトが定義されていることを確認してください。これまではデフォルトで行われていましたが、1.6 からはオプションになりました。ただし、多くの contrib アプリと一部のサードパーティ アプリは、これに依存して配置されています。
  2. 次に、どこに置くかを決める必要がありますsitemap.xml。これは重要です。これは、サイト マップに含まれる内容がその場所によって制御されるためです。/foo/sitemap.xmlで始まる URL のみを指定するfoo/と、サイトマップに含まれます。そのため、通常はプロジェクト レベルにあるルート URL confに配置するのが最善です。あなたがしなければならないことは、質問の行を適切な に追加することだけですurls.py

  3. 次に、実際にサイトマップを生成する必要があります。Django は、これを自動的に生成する 2 つの方法を提供します。GenericSiteMapあなたのモデルのために、そしてFlatPageSitemap他のすべてのために。もちろん、独自のカスタム サイトマップを作成することもできます。

    1. を継承するクラスを作成します。django.contrib.sitemaps.SiteMap
    2. このクラスで、メソッドを作成しますitems。これは、サイトマップにリンクが含まれるものです。オブジェクトについては、クエリセットを返すだけです。カスタム リンクを作成する場合は、URL 名のリストを返すと、django が自動的に呼び出しreverse()て URL を計算します。
    3. このクラス名をインポートし、ルートの「サイトマップ」辞書として渡しurls.pyます。したがってProductMap、すべての製品を持っている場合は、最後の引数として渡し{'sitemaps': {'products': ProductMap}}ます (インポートしたことを確認した後)。

それだけです。

于 2014-08-10T16:02:04.053 に答える