我希望通过模板访问settings.py中的一些内容,但是我不知道该怎么做。我已经试过了
settings.py
{{CONSTANT_NAME}}
但这似乎不起作用。可能吗?
settings.MEDIA_URL如果你使用django的内置通用视图或在render_to_response快捷方式函数中传递上下文实例关键字参数,则Django提供对模板的某些经常使用的设置常量的访问,例如和某些语言设置。这是每种情况的示例:
settings.MEDIA_URL
render_to_response
from django.shortcuts import render_to_response from django.template import RequestContext from django.views.generic.simple import direct_to_template def my_generic_view(request, template='my_template.html'): return direct_to_template(request, template) def more_custom_view(request, template='my_template.html'): return render_to_response(template, {}, context_instance=RequestContext(request))
这些视图都将具有几个常用设置,例如settings.MEDIA_URL可用于模板{{ MEDIA_URL }}等。
如果要在设置中寻找对其他常量的访问权限,则只需解压缩所需的常量并将它们添加到在视图函数中使用的上下文字典中,如下所示:
from django.conf import settings from django.shortcuts import render_to_response def my_view_function(request, template='my_template.html'): context = {'favorite_color': settings.FAVORITE_COLOR} return render_to_response(template, context)
现在,你可以通过访问settings.FAVORITE_COLOR模板{{ favorite_color }}。
settings.FAVORITE_COLOR
{{ favorite_color }}
我发现最简单的方法是单个自定义模板标签:
from django import template from django.conf import settings register = template.Library() # settings value @register.simple_tag def settings_value(name): return getattr(settings, name, "")
用法:
{% settings_value "LANGUAGE_CODE" %}
如果你希望每个请求和模板都具有此值,则使用上下文处理器更为合适。
就是这样:
context_processors.py
from django.conf import settings # import the settings file def admin_media(request): # return the value you want as a dictionnary. you may add multiple values in there. return {'ADMIN_MEDIA_URL': settings.ADMIN_MEDIA_PREFIX}
TEMPLATES = [{ # whatever comes before 'OPTIONS': { 'context_processors': [ # whatever comes before "your_app.context_processors.admin_media", ], } }]
RequestContext
render
from django.shortcuts import render def my_view(request): return render(request, "index.html")
... <a href="{{ ADMIN_MEDIA_URL }}">path to admin media</a> ...