2

我来自 PHP 背景,我知道在框架中的大多数地方都可以访问常量,我认为在 django 中也是如此。我试图在 django 中也有该 URL,但我试图从 django.contrib 中获得它。我试图利用 django 的 Site 类并导入它。但问题是在加载 settings.py 时我无法导入任何 django contrib。文件。

那么,我怎样才能自动拥有可以在任何地方使用的 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 回答