djangoテストサーバーとapache/wsgi本番環境の違いに常に悩まされています。テストサーバーで完全に機能するコードは、展開後に常に失敗し、デバッグは非常に難しいように思われることがよくあります。今回はそれも見つかりませんdjango.db.models
:、(
レンプレート
{{one_medal_owningship.get_medal_name}}
models.py
from django.db import models
class MedalsManager(models.Manager):
_cache={}
def get_by_owningship(self,owningship):
return self.__class__._cache[owningship.medal_id]
...
class Medals(models.Model):
name=models.Charfield(max_length=50)
objects=MedalsManager()
...
class MedalOwningship(models.Model):
medal=models.ForeignKey('app.Medals')
user=models.ForeignKey('auth.User')
def get_medal_name(self):
return models.get_model("app","Medal").objects.get_by_owningship(self).name #Here is ***the problem***, models is reported as None
import signal_listeners #I put signal listeners in a separated file and register them here
signal_listeners.py
# site_settings.py is a file in the root of the project for storing some control variables, like the number of posts you can post a day
import site_settings #This is the "cause" of the problem, if I change it to myproject.site_settings then everything works.
これについてインターネットで検索すると、全体像を把握するのが難しい非常に特殊なケースにつながることがよくあります。これらの問題をどのように回避すべきかについての経験則、読書リスト、またはチュートリアルがあるかどうか疑問に思っていますか?また、サーバー環境のセットアップにより、コードに不要なエラーが発生する可能性があります(たとえば、djangoとpythonのバージョンは開発環境と同じです)。どうもありがとう!
更新:
問題はなんとか解決されましたが、原因はわかりません。したがって、上記のコードでは、a_medal_owningship.get_medal_name
実行時にエラーが発生し、明らかにその関数のスコープ内にdjango.db.models
なります。None
そのmodels.pyファイルにsignal_listenerファイルをインポートしました。site_settings(カスタマイズされた定数ストレージ)をsignal_listenersにインポートする方法をからに変更import site_settings
するimport myproject.site_settings
と、問題は解決します。
ただし、のようにプロジェクトルートから別のランダムファイルをインポートしてimport foobar
も、問題はありません。したがって、site_settingsが別の場所にインポートされ、ここにインポートされると問題が発生する必要があります。
カスタマイズされたファイルのインポートがdjangoのデフォルトモジュールとどのように競合する可能性があるので、これは私には意味がありません。import foo
そして、との違いは何import myproject.foo
ですか?