Django消息框架,内置Jinja2后端

时间:2015-05-14 17:25:20

标签: django jinja2 django-messages

如何在Django 1.8中使用带有Jinja2的Django消息框架和内置的Jinja2后端?

我尝试过像以前一样,但后来记得Jinja2后端没有Django Templating Language的上下文处理器。是否可以通过会话请求。

我一直在使用Django几个月,所以即使答案很明显,请告诉我。

4 个答案:

答案 0 :(得分:11)

为了扩展上面的答案,这是一步一步的细分。

首先,为jinja2 as described here

启用自定义环境

在settings.py中,将jinja2的环境选项指向某个功能

`TEMPLATES = [
        {
            "BACKEND": "django_jinja.backend.Jinja2",
            "APP_DIRS": True,
            "OPTIONS": {
                "match_extension": ".jinja",
                "environment": "myapp.jinjaconfig.environment",
            }
        },
...]`

现在您编写该函数以向环境添加消息。创建 myapp / jinjaconfig.py (或您选择的任何名称,以匹配您添加到settings.py的内容):

from jinja2 import Environment
from django.contrib import messages

def environment(**options):
    env = Environment(**options)
    env.globals.update({
        'get_messages': messages.get_messages,
        })
    return env

此时,您的模板中已提供get_messages。您可以像这样使用它:

{% for message in get_messages(request) %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}

请注意,您必须将请求作为参数传递

答案 1 :(得分:3)

最后我决定使用Jinja2环境。我添加了一个全局可调用的环境,如'messages':messages.get_messages ,这将让我像上下文处理器一样访问它,但使用消息(请求)而不是DTL中的对象'消息'。

对于像我这样对Jinja2不太了解的初学者,我将这个callable添加到jinja2.py文件中,我们创建该文件用于启用Jinja2后端,就在url的callable之下。您还必须从此文件中的django.contrib导入消息模块。现在,您可以使用消息(请求)访问Jinja2模板中的消息存储。

答案 2 :(得分:1)

有一个ticket 24694关于将OPTIONS['context_processors']的支持添加到Jinja2模板后端。

讨论中的一个建议(它很长!)是使用django-jinja

答案 3 :(得分:0)

使用django_jinja软件包。

在您的settings.py文件中,您可以像下面的示例一样添加context_processor,并且无需执行其他任何操作即可>

# Just an example
TEMPLATES = [
    {
        "BACKEND": "django_jinja.backend.Jinja2",
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.contrib.messages.context_processors.messages",
            ],
        }
    },

执行此操作会将消息上下文合并到模板上下文中。