3

Djangoサイトマップを使用してサイト固有のサイトマップを作成したいと思います。

私のアイデアはこのようなことをすることでした:

def items(self):
    current_site = Site.objects.get_current(self.request)
    return current_site.pages.filter(draft=False)

しかし、私には2つの問題があります。

  1. self.requestが定義されていませんがcurrent_site、サイトマップ内で実際の情報を取得する方法はありますか?
  2. アイテムのURLが正しくありません。正しいものから始める必要がありますcurrent_site

正しいクエリセットをサイトマップに直接渡す必要があると思いますが、どうすればよいですか?

ありがとう、

レミー

4

2 に答える 2

1

この方法で、サイト固有のクエリセットを渡すことができます。

def items(self):   
  return YourModel.objects.by_site()

by_siteYourModelマネージャ機能です。

def by_site(self, site=None, **kwargs):
    """Get all pages for this site"""
    if not site:
        site = Site.objects.get_current()

    site = site.id

    return self.filter(site__id__exact = site, **kwargs)
于 2012-05-14T07:01:48.677 に答える
-2

フレームsitesワークが間違った方法で使用されているようです

フレームワークは、sitesリクエストに基づいてサイトを動的に切り替えることを目的としていません。これは、同じデータベースから実行されている複数の個別のデプロイメントで使用するためのものです。

問題1:

items()関数を修正するには、オブジェクトを必要とせずにどこでも機能SITE_IDできるように設定する必要があります。settings.pySite.objects.get_current()request

問題2:

ドメイン名はURLに含めないでください。サイトマップはドメインから要求されるため、すべてがそのドメイン上にあることがわかります。

これは、django内のすべてのURLに当てはまります。

これを修正するにはget_absolute_url()、モデルのメソッドが。で始まる文字列を返していることを確認してください"/"。ドメイン名に関連するものは何もありません。

アイテムのURLは、アイテムを使用して、get_absolute_url()またはアイテムを使用して呼び出すことによって生成されSitemap.location()ます。location()URLの形式に関する例のドキュメント。

詳細については、同じ問題について、このバグチケットを確認してください。

于 2012-05-14T07:33:04.713 に答える