我来自 PHP 背景,我知道在框架中的大多数地方都可以访问常量,我认为在 django 中也是如此。我试图在 django 中也有该 URL,但我试图从 django.contrib 中获得它。我试图利用 django 的 Site 类并导入它。但问题是在加载 settings.py 时我无法导入任何 django contrib。文件。
那么,我怎样才能自动拥有可以在任何地方使用的 SITE URL,无论是在模板中还是在其他地方。最好的方法是什么?任何python实用程序都可以这样做吗?
我来自 PHP 背景,我知道在框架中的大多数地方都可以访问常量,我认为在 django 中也是如此。我试图在 django 中也有该 URL,但我试图从 django.contrib 中获得它。我试图利用 django 的 Site 类并导入它。但问题是在加载 settings.py 时我无法导入任何 django contrib。文件。
那么,我怎样才能自动拥有可以在任何地方使用的 SITE URL,无论是在模板中还是在其他地方。最好的方法是什么?任何python实用程序都可以这样做吗?
例如,无论您在 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",
)
并完成。