2

私はPHPのバックグラウンドを持っていますが、フレームワークのほとんどの場所で定数にアクセスできることを知っています。また、djangoでも同じだと思います。そのURLもdjangoで取得しようとしましたが、django.contribから取得しようとしました。djangoのSiteクラスを利用して、それをインポートしました。しかし、問題は、settings.pyをロードするときに、djangocontribをインポートできないことです。ファイル。

では、テンプレートやその他の場所でどこでも使用できるSITE URLを自動的に作成するにはどうすればよいですか?そのための最良の方法は何ですか?Pythonユーティリティでこれを実行できますか?

4

1 に答える 1

9

たとえば、settings.pyで定義するものは何でも

SITE_URL = 'http://www.mydomain.com'

次のコマンドを使用して、すべてのDjango関連コードでアクセスできます。

from django.conf import settings #this imports also your specific settings.py

print settings.SITE_URL

あるいは単にSite.objects.get_current().domain

テンプレートでアクセスできるようにする場合は、独自のテンプレートコンテキストプロセッサを作成します。これをmy_project/content_processor.pyに入れてください

from django.conf import settings
def my_site_url(request):
    return {
        'SITE_URL': settings.SITE_URL,
    }

または、動的にしたい場合:

from django.conf import settings
def my_site_url(request):
    return {
        'SITE_URL': Site.objects.get_current().domain,
    }

そして、settings.pyのTEMPLATE_CONTEXT_PROCESSORS変数に追加します。その後は次のようになります。

TEMPLATE_CONTEXT_PROCESSORS =("django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.tz",
"django.contrib.messages.context_processors.messages",
"my_project.context_processors.my_site_url",
)

そして終了しました。

于 2012-09-08T19:35:17.000 に答える