全局加载Django“静态”模板标记库,而无需在每个文件中明确加载它

时间:2013-09-10 02:23:31

标签: django python-2.7 django-templates django-staticfiles django-1.4

我想在模板中使用静态标记:

<img src="{% static "img/test.jpg" %}">

我发现这需要我把

{% load static %}

在每个模板文件的开头。 由于我在任何地方都使用它,我希望它是一个全局可用的标记,所以我不需要{%load static%}来使用它。

在我的设置中,我确实有:

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.static',
)

我看到了这两个问题: Make django static tag globally availableLoad a Django template tag library for all views by default 虽然似乎都没有回答这个问题。在前一个问题不明确,后来我尝试使用时出错:

from django.template.loader import add_to_builtins
add_to_builtins('django.core.context_processors.static')

也许我没有将它放在正确的位置,或者它已经是核心的一部分所以不起作用?

如何在不为每个文件显式加载静态标记的情况下自动将静态标记添加到所有模板文件中?

3 个答案:

答案 0 :(得分:4)

我认为很多答案都会忘记你需要放置代码的地方。好吧,首先让我告诉您,您可以使用以下代码完成工作:

from django.template.loader import add_to_builtins
add_to_builtins('django.templatetags.static')

现在把它放在你的主urls.py文件中。这对我有用。

答案 1 :(得分:2)

django.core.context_processors.static替换为django.templatetags.static

>>> from django.template import Context,Template
>>> from django.template.loader import add_to_builtins
>>> add_to_builtins('django.templatetags.static')
>>> Template('{% static "img/test.jpg" %}').render(Context())
'/static/img/test.jpg'

顺便说一句,您的代码有拼写错误:将add_to_bultins替换为add_to_builtins

答案 2 :(得分:0)

答案很旧,在Django 3中不起作用

在settings.py中的“模板”->“选项”->“内置”下添加“ django.templatetags.static”

因此,使用基本的默认设置,它应如下所示:


using System;

static class Program
{
    static void Main()
    {
        VertexBoneData data = new VertexBoneData();
        data.SetBoneID(3, 42F);
        Console.WriteLine(data.GetBoneID(3)); // writes 42

        // here's what I *suspect* you're doing
        SomePassByValueMethod(data);
        Console.WriteLine(data.GetBoneID(3)); // still writes 42, not 16

        // here's one way to fix that
        SomePassByReferenceMethod(ref data);
        Console.WriteLine(data.GetBoneID(3)); // writes 122
    }
    static void SomePassByValueMethod(VertexBoneData data)
    {
        data.SetBoneID(3, 16F);
    }
    static void SomePassByReferenceMethod(ref VertexBoneData data)
    {
        data.SetBoneID(3, 122F);
    }
}
public unsafe struct VertexBoneData
{
    public Vector3 Position;
    public Vector3 Normal;
    public Vector2 TexCoord;
    public fixed float BoneIDs[Bone.MaxBoneCount];
    public fixed float BoneWeights[Bone.MaxBoneCount];

    public float GetBoneID(int i)
    {
        return BoneIDs[i];
    }

    public void SetBoneID(int i, float value)
    {
        BoneIDs[i] = value;
    }

    public float GetBoneWeight(int i)
    {
        return BoneWeights[i];
    }

    public void SetBoneWeight(int i, float value)
    {
        BoneWeights[i] = value;
    }
}
static class Bone
{
    public const int MaxBoneCount = 4; // whatever
}

// just avoiding a dependency here, since I'm in a console exe
public readonly struct Vector3 { }
public readonly struct Vector2 { }

感谢博客:https://chris-lamb.co.uk/posts/importerror-cannot-import-name-add_to_builtins-under-django-19