【问题标题】:Django template tag to display Django versionDjango 模板标签显示 Django 版本
【发布时间】:2011-05-14 10:59:07
【问题描述】:

创建在模板上显示 Django 版本的 Django 模板标签的最简单方法是什么?

我想将以下内容放在 Django 模板中并让它输出 Django 版本(在我的例子中是 base.html):

{{ django_version }}

我知道下面的 Python 代码在 shell 中输出 Django 版本,但我不知道我应该把这段代码放在哪里以及我应该如何从模板中调用它:

import django
print django.VERSION

更新:我在views.py中尝试了以下内容,但模板中没有显示任何内容:

import django    
from django.template import loader, Context
from django.http import HttpResponse
from django.shortcuts import render_to_response

    def base(request):
        django_version = django.VERSION
        return render_to_response('base.html', {'django_version': django_version} )

【问题讨论】:

    标签: python django templates tags


    【解决方案1】:

    想通了(目前使用 Django 1.3)——我需要在 settings.py 的 TEMPLATE_CONTEXT_PROCESSORS 元组中追加函数名 'django_version'

    TEMPLATE_CONTEXT_PROCESSORS = (  
        # ...  
        'myproject.context_processors.django_version',  
    )
    

    context_processors.py(感谢zsquare):

    import django
    def django_version(request):
        return { 'django_version': django.VERSION }
    

    urls.py

    urlpatterns += patterns('django.views.generic.simple',
        (r'^$', 'direct_to_template', {'template': 'base.html'}),
    )
    

    将以下内容放入您的模板中,例如 base.html

    {{ django_version }}
    

    【讨论】:

    • 可能是由于现在的新版本,但我不必像你那样设置任何 urls.py 配置。假设我在 settings.py 和 context_processors.py 中进行了更改,我可以直接调用 {{ django_version }}
    【解决方案2】:

    一个简单的上下文处理器会做你想做的事

    context_processors.py

    import django
    def django_version(request):
        return { 'django_version': django.VERSION }
    

    不要忘记在TEMPLATE_CONTEXT_PROCESSORS 下的设置中包含此上下文处理器

    【讨论】:

    • 这听起来不错。我已将上述内容放在 /mysite/blog/context_processors.py 中,然后将以下内容放在 /mysite/settings.py 中(我必须添加第一个 django.contrib.auth.context_processors.auth 行,因为没有它我得到了错误):<pre>TEMPLATE_CONTEXT_PROCESSORS = ('django.contrib.auth.context_processors.auth', 'mysite.blog.context_processors.py', ) </pre> HTML 中仍然没有显示由包含 {{ django_version }} 的模板提供支持的页面。
    • 您应该添加 mysite.blog.context_processors(不带 .py)
    • 我的错...我已将其更改为 mysite.blog.context_processors,但仍然不行。我认为一定有其他原因导致了这个问题。我会坚持下去。干杯。
    【解决方案3】:

    您应该通过模板上下文将 django.VERSION 作为变量提供给模板。如果您不知道如何操作,我建议您遵循 django 教程或阅读 django 文档。

    【讨论】:

    • 我是一名新手程序员,看过教程,但似乎无法让它工作。我已经用我在views.py中尝试的一些代码更新了这个例子。
    • 您确定模板显示了吗?当您向模板添加一些附加信息时,例如The django version is: {{ django_version }},你说你的结果是The django version is:
    • 是的,模板已显示。对“The django version is:”字样的任何修改都会显示,但 {{ django_version }} 不会输出任何内容。
    • 一方面我不会使用django.VERSION(),而是django.VERSION :)
    • 谢谢。编辑问题并将 django.VERSION() 更改为 django.VERSION。尽管如此,没有任何输出。
    【解决方案4】:

    您可能想使用django.get_version() 以字符串形式获取django 版本,django.VERSION 返回一个元组。

    >>> import django
    >>> django.VERSION
    (1, 11, 12, u'final', 0)
    >>> django.get_version()
    '1.11.12'
    

    【讨论】:

      【解决方案5】:

      context_processors.py

      import django
      
      def django_version(request):
           return {
             'django_version': django.get_version() # django.VERSION (returns a tuple.)
           }
      

      在你的项目settings.py文件中包含这个上下文处理器TEMPLATE_CONTEXT_PROCESSORS

      TEMPLATE_CONTEXT_PROCESSORS = (  
          #########  
          'myproject.context_processors.django_version',  
      )
      

      【讨论】:

        猜你喜欢
        • 2018-09-03
        • 2013-04-19
        • 2015-07-10
        • 1970-01-01
        • 2018-09-06
        • 2019-06-16
        • 2016-05-18
        • 1970-01-01
        • 2012-10-31
        相关资源
        最近更新 更多