django设置变量在传递给模板时会丢失

时间:2011-10-11 22:49:09

标签: django templates variables settings

我有一个奇怪的问题。 基本上,在我的settings.py文件中我有4个变量

URL_MAIN = 'http://www.mysite'
URL_JOBS = 'http://jobs.mysite'
URL_CARS = 'http://cars.mysite'
URL_HOMES = 'http://homes.mysite'

在我的views.py中我有通常的说法:

from settings import *

我有6个视图调用它们,只是将它们返回到上下文中的模板:

class CarsHp(TemplateView):
     ...

class JobsHp(TemplateView):
     ...

class HomesHp(TemplateView):
     ...

class CarsList(TemplateView):
     ...

class JobsList(TemplateView):
     ...

class HomesList(TemplateView):
     ...

在网址中调用

CarsList.as_view()
...

所有这些观点都有相同的陈述:

context['URL_MAIN'] = URL_MAIN
...

所有4个变量。

在模板中我正确地获取了所有4个,除了URL_MAIN,这6个视图中的2个“迷路”。我正在使用经典的{{URL_MAIN}}访问它们,我一直在尝试所有内容,从移动到重命名,但仍然是URL_MAIN在从2提供后仍未显示(我得到空字符串,没有排序错误)这些观点。所有函数基本上共享相同的代码(查询和数据处理部分除外),这些设置的变量只是被分配和返回。不是任何检查或修改。我一直在尝试使用django的shell,我总能找回它们。

我们正在接受apache服务,其中包含robots.txt文件和静态文件的一些代理传递配置。没有什么“严肃”的。

我没有发布所有6个观看源代码只是因为它们很长并且相关部分都在上面描述。但是如果你愿意,我可以发布它们,我只是不知道它是否真的有用,因为我已经三重检查所有来源冲突的名字或双重声明或不正确的使用。

提前感谢所有人,这真是让我大脑惊艳

1 个答案:

答案 0 :(得分:5)

理想情况下,您应该使用模板上下文处理器。它将减少您的代码,让您可以准确地查看问题所在。

在您的项目中创建一个名为 urls_context_processor.py (或类似)的文件并将变量放在那里:

def common_urls(request):
    return {
        'URL_MAIN': "http://...",
        'URL_JOBS': "http://...",
        'URL_CARS': "http://...",
        'URL_HOME': "http://...",
    }

并在您的settings.py

TEMPLATE_CONTEXT_PROCESSORS = = (
      ....
      'my_project.urls_context_processor.common_urls',)

现在,所有模板中的urls变量都将自动显示,您无需在每个视图中对其进行硬编码。