Django模板标签显示Django版本

9
什么是创建一个 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} )
5个回答

6

我已经弄清楚了(目前使用的是Django 1.3)- 我需要在settings.py中将函数名“django_version”添加到TEMPLATE_CONTEXT_PROCESSORS元组中:

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

context_processors.py (thanks to 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 }}了。 - whoisearth

5
一个简单的上下文处理器可以实现你想要的功能。
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 行,因为没有它我会得到一个错误):<code><pre>TEMPLATE_CONTEXT_PROCESSORS = ( 'django.contrib.auth.context_processors.auth', 'mysite.blog.context_processors.py', ) </code></pre>但是,在包含 {{ django_version }} 的模板驱动的 HTML 页面中仍然没有显示任何内容。 - sgriffee
你应该添加mysite.blog.context_processors(不带.py) - zsquare
我的错...我已经将它更改为mysite.blog.context_processors,但仍然不行。我认为一定有其他原因导致了这个问题。我会继续努力的。干杯。 - sgriffee

3

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


我是一名初学者程序员,已经查看了教程,但似乎无法使其正常工作。我已经在views.py中尝试了一些代码,并更新了示例。 - sgriffee
你确定模板被展示了吗?当你向模板添加一些额外的信息,例如 The django version is: {{ django_version }},你的结果是 The django version is: 吗? - Lucas Moeskops
谢谢。已编辑问题并将django.VERSION()更改为django.VERSION。但仍未输出任何内容。 - sgriffee
另外,你不能仅仅使用django.VERSION而不导入django。 - Lucas Moeskops
现在我已经添加了import django,但是{{ django_version }}仍然没有输出。感谢您的帮助,我会继续努力并在找到解决方案时更新此内容。 - sgriffee
显示剩余4条评论

3

您可以使用django.get_version()获取Django版本的字符串。而django.VERSION返回一个元组。

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

0

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',  
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接