首页 > 解决方案 > 将一个模板文件中的变量包含到 Django 中的另一个模板中

问题描述

我有一个模板文件 temp1.html 有这样的代码---

{% load customtags %}  
{% get_val 'VAR1' as var1 %}  {% get_val 'VAR1' as var2 %}  

在第二个模板文件 temp2.​​html 中,我想使用这些变量var1var2并且var3。我将在多个模板文件中使用这些变量。所以想在任何地方重用代码。
我将 temp1.html 包含在 temp2.​​html 中,但这些变量无法访问 temp2.​​html

{% include 'temp1.html' %}  

那么如何在另一个模板文件中使用这些变量呢?

标签: django

解决方案


我不知道是否可以在各种模板之间共享自定义标签中的值,如果这不能完全符合您的规范,请见谅。

但是当我需要将各种变量传递给不同的模板时,我使用了自定义 context_processor:您可以在“my_app.context_processors.py”之类的文件中定义上下文变量

from django.conf import settings
from my_app.models import Authorization


def custom_contexts(request):
    try:
        user_level_projects = Authorization.get_user_level_projects(request.user)
    except Exception:
        user_level_projects = {}

    # you can put here dynamics or constants data that will be accessible via the 
    # standard template syntaxes: ex -> {{ FILE_MAX_SIZE }}    
    return {
        'APPLICATION_NAME': settings.APPLICATION_NAME,
        'LOGO_PATH': settings.LOGO_PATH,
        'APPLICATION_ABSTRACT': settings.APPLICATION_ABSTRACT,
        'IMAGE_FORMAT': settings.IMAGE_FORMAT,
        'FILE_MAX_SIZE': settings.FILE_MAX_SIZE,
        'USER_LEVEL_PROJECTS': user_level_projects
   }

那么你必须在你的'settings.py'中添加这个新的context_processor

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
            'my_app.context_processors.custom_contexts',
        ],
    },
},
]

注意:在这个例子中,'USER_LEVEL_PROJECTS' 实际上是一个字典,但它也可以是其他任何东西。我在文档中找不到我找到这个的地方,但我相信你会找到更多信息。


推荐阅读