Haf*_*fiz 2 python django django-urls
我来自PHP背景,我知道常量可以在框架中的大多数地方访问,我认为它在django中也是一样的.我试图在django中拥有该URL,但我试图从django.contrib获取它.我试图利用django的Site类并导入它.但问题是在加载settings.py时我无法导入任何django contrib.文件.
那么,如何让网站URL自动,我可以在任何地方使用,模板以及其他places.What是这样做的最佳方法是什么?任何python实用程序都可以这样做吗?
无论您在settings.py中定义了什么,例如
SITE_URL = 'http://www.mydomain.com'
Run Code Online (Sandbox Code Playgroud)
可以在所有与Django相关的代码中访问:
from django.conf import settings #this imports also your specific settings.py
print settings.SITE_URL
Run Code Online (Sandbox Code Playgroud)
要不就 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,
}
Run Code Online (Sandbox Code Playgroud)
或者如果你想要它动态:
from django.conf import settings
def my_site_url(request):
return {
'SITE_URL': Site.objects.get_current().domain,
}
Run Code Online (Sandbox Code Playgroud)
并将其添加到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",
)
Run Code Online (Sandbox Code Playgroud)
并完成.
| 归档时间: |
|
| 查看次数: |
3917 次 |
| 最近记录: |