请问能不能把Django模板的部分变量写入settings.py中,比如SITE_NAME

2012-08-19 19:39:09 +08:00
 YUCOAT
我写的一个小网站里面几乎每个模板都会用到SITE_NAME这个变量,如果每次都把这个变量传入render_to_response函数中显然有点不合理,所以我想问一下能不能把它写进settings.py中,然后通过某种方法直接在模板中使用这个变量
4297 次点击
所在节点    Python
5 条回复
yanng
2012-08-19 20:37:06 +08:00
不知你是否注意到了,在每个template中,都可以通过{{ user }} 获取到request.user,还可以通过{{ MEDIA_URL }} 获取到settings.py中定义的settings.MEDIA_URL。
它是通过定义processor实现的,具体来说,就是自定义一个processor函数,此函数接受request作为参数,返回一个dict,然后将此函数放入settings.py中的TEMPLATE_CONTEXT_PROCESSORS元组中,就可以在每个传入context_instance 为RequestContext实例的view所对应的template中获取到该变量。
对于你这种情况,processor函数如下:
def site_name(request):
"""
Adds SITE_NAME context variables to the context.

"""
return {'SITE_NAME': settings.SITE_NAME}

你可以参考下我的blog:
http://www.nerdyang.com/2012/04/19/django-template%E4%B8%AD%E7%9A%84context/
qdvictory
2012-08-19 20:47:24 +08:00
很easy,settings.py里面写SITE_NAME='v2ex'
用的时候
from django.conf import settings
settings.SITE_NAME
qdvictory
2012-08-19 20:51:44 +08:00
理解错了,删不了了- -
kuno
2012-08-19 22:08:42 +08:00
vicalloy
2012-08-20 10:55:30 +08:00
和kuno说的一样,使用context processor。
另外我针对这个情况有写一个Django tag。
https://github.com/vicalloy/django-helper/blob/master/djangohelper/templatetags/djangohelper_tags.py
使用方法:
"""
{% load djangohelper_tags %}
{% get_setting "key" default_val "as_key" %}
{{ as_key }}
"""

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/45541

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX