如何在django中使用块属性

时间:2018-01-04 16:07:49

标签: django templates

我想在django中使用jinja2块作为属性。基本上在每个页面上我都想要一个不同的头文件图像。这是base.html

<header id="masthead" style="background-image:url('{% block headerimage %}{% endblock %}'"
. . .

如何从{% static 'img/some-bg.jpeg' %} index.html{% extends "base.html" %}传递“$(function() { $("form[name='formSim']").validate({ rules : {selecedElement : { required : { depends : function() { return $("#action").val() == "opt1"; } } } }); }); ?我尝试使用我刚刚展示的这种块语法,它现在可以正常工作。我该如何实现这一目标?我想从一个继承自基本模板的模板传入一个图像url的字符串。谢谢: - )。

1 个答案:

答案 0 :(得分:2)

由于标题将位于您网站的每个页面中,因此使用上下文处理器

# app/context_processors.py
from django.contrib.staticfiles.templatetags.staticfiles import static

def get_image_header_url(request):
    d = {
        reverse('home'): static("images/home.jpg"), # {% static "images/image.jpeg" %}
        reverse('about'): "url_of_image/about.jpg",
        reverse('contact'): "url_of_image/contact.jpg",
        ...
    }
    return {'header_img_url' : d[request.path]}

如果您想要显示随机图像

# app/context_processors.py
import random
def get_random_header_url(request):
       image_urls = ['url/image1.jpeg', 'url/image2.jpeg']
       return {"header_img_url" : random.choice(image_urls)}

settings.py

中定义context_processor
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        .....
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                ....
                "django.template.context_processors.i18n",
                'add.context_processors.get_random_header_url',
            ],
        },
    },
]

并在你的html文件中使用它

<header id="masthead" style="{{ header_img_url }}"
...

如果您要加载静态图片

from django.contrib.staticfiles.templatetags.staticfiles import static
static_img_url = static("images/image.jpeg"); # {% static "images/image.jpeg" %}