代码之家  ›  专栏  ›  技术社区  ›  Roger

在模板中使用Django设置[重复]

  •  23
  • Roger  · 技术社区  · 16 年前

    如果我这样做了,那么如何访问模板中的这些设置?

    谢谢

    3 回复  |  直到 13 年前
        1
  •  48
  •   Community Mohan Dere    9 年前

    比如说在你的 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
    

    回到你的生活中 设置.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)
    
        2
  •  4
  •   Bill Paetzke    13 年前

    #
    # 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 }}
    
        3
  •  2
  •   Brian Stoner    16 年前

    如果您只需要一个或两个设置来显示几个视图,上下文处理器可能会有点过头,因为它会将它们添加到应用程序中的所有视图中。但如果在很多模板中使用它,那么竞争处理器就是一个不错的选择。

    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 }}
    
    推荐文章