0

組み込みのフレームワーク django-sitemaps を使用して、Django Web サイトにサイトマップを追加しようとしています。私はすべてを正しく設定したと信じています (時々従うのが難しい)ドキュメントに従って、しかし今私がしようとするrunserverと、次のエラーが発生します:

[...snip...]
  File "E:\Programming\my_project\my_project\urls.py", line 7, in <module>
    from sitemaps import StaticViewsSitemap
  File "E:\Programming\my_project\some_app\sitemaps.py", line 2, in <module>
    from models import Story
  File "E:\Programming\my_project\some_app\models.py", line 18, in <module>
    class Category(models.Model):
  File "E:\Programming\my_project\venv\lib\site-packages\django\db\models\base.py", line 113, in __new__
    raise RuntimeError(
RuntimeError: Model class models.Category doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

問題のモデルはsome_app間違いなくの一部でありINSTALLED_APPS数か月間機能しており、少しも触れていません。サイトマップに関連するすべてをコメントアウトすると、今までと同じように完全に機能します。モデルは単に で宣言された最初のものmodels.pyです。エラーは、インポートと、サイトマップの構築時にプロジェクトの適切な部分が初期化されていないことに関係していると思います。

関連ファイルを含むプロジェクトのディレクトリ ツリーを次に示します。

my_project
├ my_project
│ ├ ...
│ ├ urls.py
│ └ sitemaps.py
├ some_app
│ ├ ...
│ ├ models.py
│ ├ urls.py
│ └ sitemaps.py
├ some_app2
│ ├ ...
│ ├ models.py
│ ├ urls.py
│ └ sitemaps.py
└ some_app3
  ├ ...
  ├ models.py
  ├ urls.py
  └ sitemaps.py

ここにメインがありurl.pyます:

from django.contrib.sitemaps import views
from sitemaps import StaticViewsSitemap
import some_app.sitemaps as some_app
import some_app2.sitemaps as some_app2
import some_app3.sitemaps as some_app3


sitemaps = {
    "static": StaticViewsSitemap,
    "some_app": some_app.sitemap,
    "some_app2": some_app2.sitemap,
    "some_app3": some_app3.sitemap,
}

sitemap_urls = [
    path("sitemap.xml", views.index, {"sitemaps": sitemaps}),
    path("sitemap-<section>.xml",
         views.sitemap, {"sitemaps": sitemaps},
         name="django.contrib.sitemaps.views.sitemap"),
]

urlpatterns = [
    ...,
    *sitemap_urls,
]

my_project.sitemaps.py:

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


class StaticViewsSitemap(Sitemap):
    priority = 0.5
    changefreq = "daily"

    def items(self):
        return [
            "some_app:some_static_route",
            "some_app2:other_static_route",
            "some_app3:another_static_route",
        ]

    def location(self, item):
        return reverse(item)  # NOTE: I also tried with reverse_lazy() to no avail

some_app.sitemaps.py(他のすべてのものは似ています):

from django.contrib.sitemaps import GenericSitemap
from models import Story


sitemap = GenericSitemap(
    {
        "queryset": Story.objects.filter(draft=False, secret=False),
        "date_field": "date",
    },
    protocol="https",
    changefreq="weekly",
    priority=0.7,
)

エラーのモデル は、some_app.models.Categoryどのサイトマップでも直接言及されていないことに注意してください。これは単に の外部キーですStory。に関連するものをコメントアウトしてもsome_app、何かが から何かをインポートしている限り、エラーが発生し続けますdjango.contrib.sitemaps

明らかな何かが欠けている可能性がありますが、これまでdjango-sitemapsを使用したことがないため、手がかりがありません. ドキュメントに適切に従っていると思います。

私はDjangoバージョン3.1.2を使用しています。

4

0 に答える 0