在模板中使用Django设置

时间:2010-08-07 12:37:19

标签: python django django-templates

我希望能够将某些配置信息放在我的settings.py文件中 - 例如网站名称,网站网址等。

如果我这样做,我怎么才能在模板中访问这些设置?

由于

3 个答案:

答案 0 :(得分:44)

让我们在你的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)

答案 1 :(得分:4)

如果使用基于类的视图:

#
# 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 }}

答案 2 :(得分:2)

如果您只需要一对或两个设置来查看几个视图,则Context 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 }}