組み込みのフレームワーク 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を使用しています。