【发布时间】:2011-03-26 17:15:08
【问题描述】:
我希望能够将某些配置信息放入我的 settings.py 文件中 - 例如站点名称、站点 URL 等。
如果这样做,我如何才能访问模板中的这些设置?
谢谢
【问题讨论】:
标签: python django django-templates
我希望能够将某些配置信息放入我的 settings.py 文件中 - 例如站点名称、站点 URL 等。
如果这样做,我如何才能访问模板中的这些设置?
谢谢
【问题讨论】:
标签: python django django-templates
假设在您的settings.py 文件中,您拥有:
SITE_URL='www.mydomain.tld/somewhere/'
SITE_NAME='My site'
如果您只需要一两个视图:
from django.shortcuts import render_to_response
from django.conf import settings
def my_view(request, ...):
response_dict = {
'site_name': settings.SITE_NAME,
'site_url': settings.SITE_URL,
}
...
return render_to_response('my_template_dir/my_template.html', response_dict)
如果您需要跨大量应用和/或视图访问这些,您可以编写上下文处理器来保存代码:
詹姆斯对此有一个教程 online.
本网站上提供了有关上下文处理器何时以及是否可用的一些有用信息 here.
在您的 my_context_processors.py 文件中,您会:
from django.conf import settings
def some_context_processor(request):
my_dict = {
'site_url': settings.SITE_URL,
'site_name': settings.SITE_NAME,
}
return my_dict
回到你的settings.py,激活它:
TEMPLATE_CONTEXT_PROCESSORS = (
...
# yours
'my_context_processors.some_context_processor',
)
在您的views.py 中,让视图像这样使用它:
from django.shortcuts import render_to_response
from django.template import RequestContext
def my_view(request, ...):
response_dict = RequestContext(request)
...
# you can still still add variables that specific only to this view
response_dict['some_var_only_in_this_view'] = 42
...
return render_to_response('my_template_dir/my_template.html', response_dict)
【讨论】:
如果使用基于类的视图:
#
# in settings.py
#
YOUR_CUSTOM_SETTING = 'some value'
#
# in views.py
#
from django.conf import settings #for getting settings vars
class YourView(DetailView): #assuming DetailView; whatever though
# ...
def get_context_data(self, **kwargs):
context = super(YourView, self).get_context_data(**kwargs)
context['YOUR_CUSTOM_SETTING'] = settings.YOUR_CUSTOM_SETTING
return context
#
# in your_template.html, reference the setting like any other context variable
#
{{ YOUR_CUSTOM_SETTING }}
【讨论】:
如果您只需要为几个视图设置一两个设置,上下文处理器可能会有点过分,因为它会将它们添加到您应用中的所有视图中。但如果它在很多模板中使用,Contest Processor 是不错的选择。
对于简单的一次性情况,只需将您需要的任何设置从视图传递到模板:
from django.conf import settings
from django.shortcuts import render_to_response
def some_view(request):
val = settings.SAVED_SETTING
return render_to_response("index.html", {
'saved_setting':val
})
并通过以下方式访问模板中的设置:
{{ saved_setting }}
【讨论】: