質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2068閲覧

djangoでサイトマップを自動生成しましたが、本番環境で動きません。

hiranohirano

総合スコア33

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/12/05 09:43

前提・実現したいこと

以下の2つのページを参考に、サイトマップを自動生成する機能を作りました。
Djangoで、サイトマップを自動生成する
Djangoでサイトマップを動的に生成する方法

ローカル開発環境では問題なく動き、xmlサイトマップが表示されました。
本番環境(Nginx, gunicorn, postgresql))だと、404エラーページが表示されてしまいます。

開発環境と本番環境で変えたこと

DEBUG=True or False 以外コードは同じです。

また、開発環境では、管理画面のサイトマップのサイトを登録するところ(http://127.0.0.1:8000/admin/sites/site/)を以下のようにしました。
ドメイン名:127.0.0.1:8000
表示名:127.0.0.1:8000

本番環境では、ドメインを入れました。
ドメイン名:example.com
表示名:example.com

該当するコード

settings.py

python

1INSTALLED_APPS = [ 2(省略) 3 'django.contrib.sites', 4 'django.contrib.sitemaps', 5 'sampleapp', 6]

settings.pyと同じ階層のurls.py

python

1from django.contrib import admin 2from django.contrib.sitemaps.views import sitemap 3from django.urls import path, include 4from django.conf import settings 5from django.conf.urls.static import static 6from sampleapp.sitemap import * 7 8sitemaps = { 9 'index': IndexSitemap, 10} 11 12urlpatterns = [ 13 path('admin/', admin.site.urls), 14 path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='sitemap'), 15] 16 17urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 18urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 19 20urlpatterns += [path('', include('sampleapp.urls', namespace='sampleproject'))]

sitemap.py

python

1from django.contrib.sitemaps import Sitemap 2from django.shortcuts import resolve_url 3from .models import * 4 5 6class IndexSitemap(Sitemap): 7 changefreq = "weekly" 8 priority = 1.0 9 10 def items(self): 11 return ['sampleapp:index'] 12 13 def location(self, obj): 14 return resolve_url(obj)

開発環境では、問題なく動きました。
本番環境では何か追加で必要な設定等あるのでしょうか?
お分かりになる方、何卒宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

morinatsu

2018/12/05 14:41

サーバ側のログ(nginx、django等の)は読んでいますか?それらがないと、何が起こってるかすらわからないと思います。
hiranohirano

2018/12/05 15:22

開発用サーバーでは、djangoのログにステータスコード200が返ってきています。/var/log/nginx/access.logを見ると、404エラーが出ています。/var/log/nginx/error.logには、ドメイン/sitemap.xml/にアクセスしても、新しいエラーは出ませんでした。404エラーということは、urls.pyの設定が間違っているのでしょうか?
hiranohirano

2018/12/05 15:23

本番環境でのdjangoのログの設定も見直してみます。
guest

回答1

0

自己解決

urls.pyのurlpatternsを'sitemap.xml'→'sitemap.xml/'に変更し、解決しました。
ありがとうございました。

投稿2018/12/06 02:07

hiranohirano

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問