我已经到了一个点,我需要将某些变量传递给我的所有视图(主要是自定义身份验证类型变量).
我被告知写我自己的上下文处理器是最好的方法,但我有一些问题.
我的设置文件如下所示
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.contrib.messages.context_processors.messages",
"sandbox.context_processors.say_hello",
)
Run Code Online (Sandbox Code Playgroud)
如您所见,我有一个名为'context_processors'的模块和一个名为'say_hello'的函数.
看起来像
def say_hello(request):
return {
'say_hello':"Hello",
}
Run Code Online (Sandbox Code Playgroud)
我是否正确地假设我现在可以在我的观点中做以下事情?
{{ say_hello }}
Run Code Online (Sandbox Code Playgroud)
现在,这在我的模板中没有任何内容.
我的观点看起来像
from django.shortcuts import render_to_response
def test(request):
return render_to_response("test.html")
Run Code Online (Sandbox Code Playgroud) 我试图将变量(浏览器变量)传递给我的应用程序中的所有模板.有关如何使其工作的任何建议?
视图:
def browser(request):
primary_cat_list = Categories.objects.order_by("category")
subcat_list = SubCategories.objects.order_by("sub_category")
product = Productbackup.objects.order_by("website")
browser = list(chain(primary_cat_list, subcat_list, product))
return render_to_response('reserve/templates/base.html', locals(), context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
模板:
{% for prod in browser %} {{ prod }}, {% endfor %}
Run Code Online (Sandbox Code Playgroud) 我有这个setting.py:
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
'django.core.context_processors.static',
'django.contrib.auth.context_processors.auth',
)
Run Code Online (Sandbox Code Playgroud)
每当我尝试在模板中访问请求时(例如{{ request.user.get_profile.custom_username }}),我都没有结果.我认为请求没有添加到模板中,因为如果我强制请求进入Context(在视图中),我可以访问它:
ctx = {}
#ctx['request'] = request
return render_to_response('index.html', ctx)
Run Code Online (Sandbox Code Playgroud)
有帮助吗?谢谢